こんにちは、けいすけです。
今回はgcloudコマンドでCompute Engineにssh接続する際、めちゃめちゃ苦労したよ。という話です。
結論はしょうもないですが、もし同じ失敗をしている人がいたら参考にしていただけると幸いです。
gcloudコマンドでのssh接続について
ドキュメントを参考にコマンドを実行すれば、普通は簡単に接続できると思います。
しかし私はめちゃめちゃ苦労してしまうのでした。。
ドキュメント通り、以下のコマンドを実行します。
プロジェクト名:tutorial-20210727
地域:us-central1-a
インスタンス名:instance-1
としています。
$ gcloud compute ssh --project=tutorial-20210727 --zone=us-central1-a instance-1
Enter passphrase for key '/Users/adachikeisuke/.ssh/google_compute_engine':
adachikeisuke@34.72.137.84: Permission denied (publickey).
ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255].
しかし、passphraseというものの入力を求められ、何も入力せずにエンターを押すとそのままエラーとなってしまいます。
passphraseを求められるなんて、ドキュメントにはどこにも書いていません。
なぜssh接続が失敗するのか
これは一体どういう状況なのかを説明します。
実は以前GCEのインスタンスにssh接続を試みた際、passphraseを自分で登録していたようなのです。
私はそのことを全く覚えていませんでした。
自分のパソコン(mac)の~/.ssh
配下にgoogle_compute_engine
とgoogle_compute_engine.pub
が存在している方はまさにこのパターンだと思います。
google_compute_engine
は秘密鍵でgoogle_compute_engine.pub
は公開鍵です。
gcloudコマンドで接続すると、秘密鍵と公開鍵を自動で作成してくれ(この際にpassphraseの設定が行われます。)、この鍵を使用して接続を行ってくれます。
ですので、gcloudコマンドを使用すれば接続の際に鍵の存在を意識しなくても良いのです。
###解決方法
原因がわかってしまえば簡単に解決できます。
まずは~/.ssh
配下のgoogle_compute_engine
とgoogle_compute_engine.pub
を削除してください。
そして、再びインスタンスにssh接続しに行きます。
$ gcloud compute ssh --project=tutorial-20210727 --zone=us-central1-a instance-1
WARNING: The private SSH key file for gcloud does not exist.
WARNING: The public SSH key file for gcloud does not exist.
WARNING: You do not have an SSH key for gcloud.
WARNING: SSH keygen will be executed to generate a key.
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
すると以前とは異なる表示が出ます。
ここで何か文字列を入力するとそれがpassphraseとして登録されます。
何も入力しなければpassphraseなしでインスタンスに接続します。
~/.ssh
配下を見に行くとgoogle_compute_engine
とgoogle_compute_engine.pub
が作成されていると思います。
以上です。
最後まで読んでいただきありがとうございます。