こんばんは、エンジニアの眠れない夜です。
GCPにSSHで接続する方法をSSH接続に慣れていない方向けに説明します。
GCPにSSHで接続するまでの全体像
- ローカルPCで秘密鍵/公開鍵を作成します。
- GCPのインスタンスにローカルの公開鍵を登録します。
- ローカルPCからGCPインスタンスに秘密鍵を使って接続します。
イメージとしては勘合貿易です。
- 秘密鍵と公開鍵を作成
- 相手に公開鍵(右側)を渡す
- アクセスするときは秘密鍵(左側)を持って一致するか確認
これで秘密鍵/公開鍵の仕組みは二度と忘れませんね!
ローカルPCで秘密鍵/公開鍵を作成します。
まずは自分のPCのターミナルで下記のコードを実行して秘密鍵/公開鍵を作成します。
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
your_email@example.comは適宜置き換えてください。
※ @の前がSSHでサーバーにログインするときのユーザー名になります。
3回入力を求められます。
- 1回目は保存場所(ファイル名)
- 2回目と3回目はパスワード
(SSHを作成するのが初めてで面倒な人はEnterを3回押せば鍵を作れます。)
1回目の質問はファイル名を指定
1回目の質問時にファイル名を変更すれば新規で秘密鍵/公開鍵を作成できます。
1回目のファイル名を指定した後に同じファイル名の秘密鍵/公開鍵を作成している人は上書きしていいか聞かれるので no を選択してください。
消してもいい場合は yes でもいいですが、既にどこかでこの鍵を使用していると使えなくなるので注意が必要です。
何も指定しない場合は
- id_rsa(秘密鍵 [自分用])
- id_rsa.pub(公開鍵 [相手に渡す用])
が作成されます。
このあとの説明はファイル名を指定せずに id_rsa
id_rsa.pub
が作成された前提で話を進めます。
2回目と3回目の質問はパスワードを入力
2回目と3回目の質問は接続する時に入力するパスワードです。
公開鍵暗号は秘密鍵が盗まれてもパスワードが分からないと接続できないという2段構えになっているということですね。
※ 開発環境用などで毎回パスワードを入力するのが面倒な場合は省略もできます。
こんなのが表示されれば鍵の作成は成功です!
+---[RSA 4096]----+
| o++B*B|
| =o *+|
| . .+ +|
| . o *o o=..|
| ..o+*..*==.|
+----[SHA256]-----+
公開鍵の表示とコピー
下記のコードを実行すると公開鍵を表示できます。
cat ~/.ssh/id_rsa.pub
こんな感じで表示されます。初めから最後までコピをします。
ssh-rsa AAAAB3NzaC 〜省略〜 1fQQ== user_name
次のステップで貼り付けるのでそれまで、他のものをコピーしないように気をつけてください。
GCPのインスタンスにローカルの公開鍵を登録します。
GCPのインスタンス一覧から接続したいインスタンスを開きます。
そして、「編集」を押すと下の方に「SSHキーがN個あります」という表示があるのでその下の、「表示して編集する」をクリックします。
すると画面が開くのでそこに先ほどコピーした公開鍵を貼り付けます。
テキストボックスの左にSSHでログインする時に利用する「ユーザー名」が表示されます。このユーザー名でログインしないと、SSH接続時にPermission denied (publickey)
というエラーが出ます。
ユーザ名を変更したい場合は公開鍵の最後の方に鍵を作成したときのメールアドレス(<code>your_email@example.com</code>
)が表示されています。このメールアドレスの@の前を変更するとSSHでログインするときのユーザー名が変わります。
ただ、このタイミングでユーザー名を変更するのは邪道な気がするので鍵を作成する段階で
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
"your_email@example.com"
を変更した方がいいです。
ユーザ名を確認できたら画面を下までスクロールして「保存」します。
ローカルPCからGCPインスタンスに秘密鍵を使って接続します。
最後にローカルからインスタンスに接続ができれば完了ですね!
ローカルのPCのターミナルを開いて
ssh user_name@インスタンス外部IPアドレス -i 秘密鍵のパス
を入力すればOKです。インスタンスの外部IPアドレスはインスタンス一覧から確認できます。
入力例はこんな感じです。
ssh user_name@35.221.121.130 -i ~/.ssh/id_rsa
- user_nameを先程のユーザー名と置き換える
35.221.121.130
をサーバーの外部IPアドレスに置き換える- 秘密鍵のファイル名が違う場合は
id_rsa
を自分の秘密鍵のファイル名に変更する
これで無事にGCPのインスタンスにSSH接続ができましたね^^
おまけ
接続する時に毎回上記の情報を引っ張ってきて入力するのは面倒なのでconfigファイルに設定内容を保存します。
下記のコマンドを実行してconfigファイルを編集します。
vim ~/.ssh/config
入力する内容は下記の通りです。
Host 任意の接続名
HostName ホスト名(ドメイン or IP)
User ユーザー名
Port ポート番号
IdentityFile 鍵へのPATH(例えば~/.ssh/hoge.key)
先程接続に使った情報を元にした入力例だとこの様になります。
StrictHostKeyChecking no
Host __server_name
HostName 35.221.121.130
User user_name
Port 22
IdentityFile ~/.ssh/id_rsa
1行目は初回SSH接続時に確認されないようにするための設定です。
Hostを__server_name
と書きましたがここは好みで変更してください。
__
を前につけることで ssh __
tab を押すとconfig に登録されているホストの一覧を確認できるので便利です。
さて、SSHで接続してみましょう。入力する内容は
ssh Host
だけで接続できます。Hostは__server_name
と設定したので
ssh __server_name
たったこれだけで次からサーバーに接続できるようになりました!便利ですね(^^)♪
[…] エンジニアの眠れない夜[秘密鍵/公開鍵]GCPにSSHで接続する方法https://sleepless-se.net/2018/09/15/gcp-ssh/こんばんは、エンジニアの眠れない夜です。 GCPにSSHで接続する方法をSSH接続に慣れて […]
こんにちは
ssh-keygenで秘密鍵/公開鍵の作成の際に
ビット数をデフォルトから4096に変更するのは何か理由があるのでしょうか?
かつろぐさん
コメントありがとうございます。
デフォルトの設定より強固になります。
参照ページ
https://qiita.com/hietahappousai/items/a7fae4838e510136fc08
[…] https://sleepless-se.net/2018/09/15/gcp-ssh/ […]
むっちゃたすかりました!!
お役に立ててよかったです。