Google-Compute-Engine

“無法啟動執行雲使用者/最終腳本”。: 執行雲使用者/最終腳本時Google計算實例命中錯誤

  • March 27, 2019

問題

如果我沒有 SSH 密鑰並且 google 使用者/最終腳本無法執行,我如何連接到 Google 實例?

問題背景

執行 Ubuntu 16.04 LTS 的 Google 計算實例。

我改變了它的基本版本的python,以便安裝一個對python的’setup-tools’非常挑剔的python包。

我的理論是這種變化破壞了Google云腳本的啟動,這是我過去連接到實例的唯一方式。

問題詳情

我們可以驗證伺服器是否已打開,因為它在此處為不良 nginx 網路提供服務:http: //35.201.199.224/

我有一個伺服器日誌,如果有人願意幫助我在這裡閱讀,我可以在這里分享:https ://pastebin.com/DF5wsLhH

我認為最重要的部分是這個片段

Mar 21 17:21:50 instance-1 systemd[1]: Started Google Compute Engine Network Daemon.
Mar 21 17:21:51 instance-1 google_network_daemon[1340]: Traceback (most recent call last):
Mar 21 17:21:51 instance-1 google_network_daemon[1340]:   File "/usr/bin/google_network_daemon", line 9, in <module>
Mar 21 17:21:51 instance-1 google_network_daemon[1340]:     load_entry_point('google-compute-engine==2.8.4', 'console_scripts', 'google_network_daemon')()
Mar 21 17:21:51 instance-1 google_network_daemon[1340]:   File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 542, in load_entry_point
Mar 21 17:21:51 instance-1 google_network_daemon[1340]:     return get_distribution(dist).load_entry_point(group, name)
Mar 21 17:21:51 instance-1 google_network_daemon[1340]:   File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2569, in load_entry_point
Mar 21 17:21:51 instance-1 google_network_daemon[1340]:     return ep.load()
Mar 21 17:21:51 instance-1 google_network_daemon[1340]:   File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2229, in load
Mar 21 17:21:51 instance-1 google_network_daemon[1340]:     return self.resolve()
Mar 21 17:21:51 instance-1 google_network_daemon[1340]:   File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2235, in resolve
Mar 21 17:21:51 instance-1 google_network_daemon[1340]:     module = __import__(self.module_name, fromlist=['__name__'], level=0)
Mar 21 17:21:51 instance-1 google_network_daemon[1340]:   File "/usr/lib/python3/dist-packages/google_compute_engine/networking/network_daemon.py", line 26, in <module>
Mar 21 17:21:51 instance-1 google_network_daemon[1340]:     from google_compute_engine import config_manager
Mar 21 17:21:51 instance-1 google_network_daemon[1340]:   File "/usr/lib/python3/dist-packages/google_compute_engine/config_manager.py", line 23, in <module>
Mar 21 17:21:51 instance-1 google_network_daemon[1340]:     from google_compute_engine.compat import parser
Mar 21 17:21:51 instance-1 google_network_daemon[1340]:   File "/usr/lib/python3/dist-packages/google_compute_engine/compat.py", line 23, in <module>
Mar 21 17:21:51 instance-1 google_network_daemon[1340]:     import distro
Mar 21 17:21:51 instance-1 google_network_daemon[1340]: ModuleNotFoundError: No module named 'distro'

我認為它找不到這個模組,因為它正在尋找錯誤的 python 版本。

結論

我確實明白,我只能通過使用 Google 的“通過 SSH 連接按鈕”進行連接,這是不可原諒的懶惰,但我天真地認為,西方世界可以說是最好的商業開發人員會為我掌控一切。 哦,太誘人了 ssh 按鈕

您可能必須執行以下操作:

  1. 關閉這個虛擬機(不刪除磁碟!)
  2. 創建一個新的虛擬機
  3. 以讀/寫模式安裝此磁碟
  4. 修復 Python 安裝以允​​許腳本執行以啟用 SSH 會話

如果此 VM 正在提供您不會失去的實時流量,請考慮以下事項:

  1. 從此虛擬機的永久磁碟創建快照
  2. 從快照創建一個新的 GCE VM 實例
  3. 修復它,使其執行並能夠服務請求
  4. 將流量重定向到此服務實例
  5. 修復原盤

此外,考慮使用容器來執行特定版本的依賴項,這些依賴項需要不同的基礎工具(例如 Python),否則可能會與系統工具或外部程序(例如 SSH 之前/之後腳本等)發生衝突。

引用自:https://serverfault.com/questions/959947