這篇文章是作為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
一開始你有可能會出現這樣的畫面,一般來說這樣的畫面會有兩個地方有錯誤的可能:
- 欲連線的project id跟目前設定的project id不同
- 欲連線的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/