# [Google Compute Engine]如何連線至Linux執行個體

linjiahung(40)
Published in
#cn
Words
1152
Reading
6 min
9y

這篇文章是作為Google這篇連線至 Linux 執行個體文章的補充,以下會聚焦在如何「透過命令列連線至執行個體」。

由於我的作業系統是Mac,所以這篇文章會以MacOS為前提討論。(不過不同版本間的操作方式差異不大)

透過命令列連線至執行個體

在命令列有兩者做法連線至執行個體,一種是glcoud指令,另一個是透過SSH指令。

gcloud指令

在開始使用gcloud指令之前,你可能需要先安裝Google SDK,請直接拉到「互動式安裝程式」的部分,依照上面的指令執行。

當你執行到gcloud init的指令的時候,terminal會依序要求你「登入你的Google Cloud帳號」、選擇project(對照project id)。

Project id可以在console點擊project,在ID欄位下的字串就是你的id。

透過gcloud指令連線至執行個體

要透過gcloud連線上執行個體,你可以使用以下的指令

$ gcloud compute ssh your_instance_name


一開始你有可能會出現這樣的畫面,一般來說這樣的畫面會有兩個地方有錯誤的可能:

  1. 欲連線的project id跟目前設定的project id不同
  2. 欲連線的zone跟目前設定的zone不同
    這邊的訊息代表的是你目前透過gcloud「想要連線」的執行個體的詳細訊息

The resource 'projects/projects_id/zones/your_instance_located_zone/instance_name'

註:
如果你出現了以下的錯誤訊息,那代表權限不足(也就是還沒登入)

所以你必須先登入google cloud,請輸入以下的指令

$ gcloud auth login

所以你首先要對照這串訊息中的project_id和your_instance_located_zone是不是跟google cloud console上的一致。

1.欲連線的project id跟目前設定的project id不同

如果你「想要連線」的project_id跟console上的不同,你可以透過以下的指令設定

$ gcloud config set project <id>

2.欲連線的zone跟目前設定的zone不同

如果你「想要連線」的zone跟console上的不同,你可以透過以下的指令設定

$ gcloud config set compute/zone your_instance_located_zone

當你確定project_id和zone都設定正確後,再次嘗試

$ gcloud compute ssh your_instance_name

如果你看到類似的畫面,那就代表你已經連線成功了,恭喜你。

確認在google cloud上是否有儲存金鑰

如果這時候進到選單中的「中繼資料」

在點擊SSH金鑰後,照理說你會看到以下的畫面

這代表google compute engine已經儲存了你的金鑰了。如果不曾在該專案中建立任何的執行個體並曾經連線上的話,基本上是不會有任何的金鑰被儲存。

你可以到~/.ssh這個資料夾中查看檔案內容,你應該會看到google_compute_engine.pub和google_compute_engine
兩個檔案。這兩個檔案分別代表了google cloud為妳生成的公開金鑰(pub)和金鑰。其中儲存在google cloud上的是公鑰(google_compute_engine.pub)。

你可以透過在terminal輸入

$ cat google_compute_engine.pub

檢視你的公鑰內容。這個內容應該會跟你在中繼資料中的SSH金鑰上儲存的內容一致。

SSH指令

當我們使用SSH指令時,我們會透過以下的指令來連線

$ ssh -i ~/.ssh/my-ssh-key [USERNAME]@[IP_ADDRESS]

註1:username就是你的gmail帳號的username([email protected])
註2:ip_address可以在執行個體中找到

使用現有的公、私鑰

一般來說,公鑰和私鑰都會存在~/.ssh這個資料夾中,公鑰和私鑰的檔名會以my-ssh-key.pub和my-ssh-key兩個檔案成對出現,而my-ssh-key可以是任何的檔名。

註:實務上my-ssh-key這個檔名預設使用id_rsa,server會讀取id_rsa的金鑰。如果要使用其他的金鑰檔,記得用-i這個flag標註

如果你的檔案中有現有的公鑰和私鑰,那你可以直接透過

$ cat my-ssh-key.pub

取得公鑰,並將公鑰存在中繼資料上的SSH金鑰。

然後再下一次指令來連線

$ ssh -i ~/.ssh/my-ssh-key [USERNAME]@[IP_ADDRESS]

這樣就會連線成功了

產生新的公、私鑰

透過以下指令生成新的公、私鑰

$ ssh-keygen -t rsa -f ~/.ssh/my-ssh-key -C [USERNAME]

你可以輸入passphrase來保護這組金鑰

可以限制只有自己有金鑰的存取權限

$ chmod 400 ~/.ssh/my-ssh-key

接著透過

$ cat ~/.ssh/my-ssh-key.pub

取得你的公鑰

將這組公鑰新增到中繼資料中的SSH金鑰,接著透過

$ ssh -i ~/.ssh/my-ssh-key [USERNAME]@[IP_ADDRESS]

就可以連上了。

參考資料:
連線至 Linux 執行個體
gcloud compute ssh fails
https://blog.sleeplessbeastie.eu/2017/11/02/how-to-fix-missing-dirmngr/