こんにちは。コムデインフラ事業部の鳴海です。
今日はサーバーの保守運用者にとっては必須といってもよい ssh(Secure Shell) 接続について解説します。名前に「Shell(シェル)」とついているようにクライアントとサーバー間のコマンド(CLI)操作を安全に行うための暗号化された通信プロトコルとなります。
前提条件
- 通信先のサーバーでsshサーバーが起動している
- 通信先のサーバーでアカウントが作成されている
- 接続を行う端末にsshクライアントが入っている
この3つだけです。そしてほぼ全てのインストールが終わったサーバーではsshサーバーが起動しています。端末にsshクライアントが入っているかはターミナルやパワーシェルから以下のコマンドで確認できます。
PS C:\Users\user> ssh -V
OpenSSH_for_Windows_8.6p1, LibreSSL 3.4.3
ちなみにこれはバージョンを確認するコマンド「ssh -V」をWindows11で実行したものとなります。
それでは実際にサーバーに接続してみましょう!
「ssh -l アカウント名 サーバーのIPアドレス」とターミナルに入力します。
PS C:\Users\user> ssh -l user-name 10.0.0.1
user-name@10.0.0.1's password:
はい。パスワードの入力画面が返ってきましたね。
サーバー管理者にパスワード発行をしてもらっている場合はここでパスワードを入力すると無事ログイン完了となります。
しかし。。。
PS C:\Users\user> ssh -l user-name 10.0.0.1
user-name@10.0.0.1: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
と返ってきた場合はパスワード認証が許可されていません。
パスワードなしでどうやってログインするの?と疑問に思わるでしょうが返ってきたメッセージをよく見てみると。。。
publickey,gssapi-keyex,gssapi-with-mic
はい。それらしいことが書いてありますね。英語が苦手な方でもなんとなく分かるかと思います。
「publickey?」 公開鍵?
そうです。正解です。
最近は脆弱性と運用の観点からアカウントにパスワードを発行せず全て公開鍵認証としているケースがほとんどです。
そして一度公開鍵を作ってしまえばサーバー管理者にそれを渡すだけでパスワードを覚えておく必要がないためとても楽ちんな仕組みとなっています。
公開鍵を作ろう!
さて。ここからが本題です。まず公開鍵認証に必要なもの。
それが「秘密鍵」です!いわゆるパスワードのようなものでこれは誰にも渡してはいけません。ましてやネットに公開など絶対にしてはいけません。
それでは作成してみましょう。ssh-keygen とターミナルに入力します。
PS C:\Users\user> ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\user/.ssh/id_rsa
Your public key has been saved in C:\Users\user/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:ZFv8e8miOeQsJrJqVB0DMsb5HOBiHWZHujhz80Ntc6o user@win11-home
The key's randomart image is:
+---[RSA 3072]----+
| .=*o+ |
| o*o= o . |
|...= o oo o |
|... = oo o . |
| + = . +S. . |
| = + . + . o . |
| . o . + o + |
| . . + o +o o |
| ....E o .o. |
+----[SHA256]-----+
はい。これで自分のホームディレクトリ配下に .ssh というフォルダが作成されそこに id_rsa (秘密鍵) とid_rsa.pub (公開鍵) という二つの鍵が作成されていると思います。
id_rsa
id_rsa.pub
作成時に名前を指定することもできますがとりあえず作成してあとから名前を変えましょう。この名前のままにしておくと再作成した時に同じ名前で上書きされてしまったりと事故のもとです。
PS C:\Users\user> cd ~/.ssh
PS C:\Users\user\.ssh> mv id.rsa my-rsa.pem
PS C:\Users\user\.ssh> mv id_rsa.pub my-rsa.pub
それではそれぞれの中身を見てみましょう。
公開鍵 (my-rsa.pub)
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCVQzi5jAId+G1sU/ij/KSeihNGkxIwsJ8DV7mHL0bnXOrbkjakCOeXmOrAzVlEVAXaM3wgJbKvjnsqFGSXxUBJaqzD/IzI11B5w2iPqUjmabLwIkP68DTfg7G1oLvW/oGwM/yljtHdHzgfnyoJ1Rsn+jHV+t9CfXaWvTMwHl/x2j0+XiPwUragaRg/eacbFW+p4HVUP779C+fzUcE7uS7Vx/VcBmvwg3Oa0lBxabM3DL5cgMzQ9E06TeClTxqyj1tYEsly04vF3Oa/bTSE2c2sUkTF2qfV23jqUNrUVx+GDRaXbX5lOh/An5La5jYkXexHs1VBvi6bRFi8yhfcumuMknaqZpMrJAc242f8bBHeN5TAER0L6ZdIsjvAXmWgih8Q29De/Hbb1gRM7axEraPDSjdCg5dAziRn5JtkCoxhLG6HcZfrrz6lgboleHPlu5gJilRn29d+XA0V2waqpDwmpLoFDYNRe1MCEQGQ8aoKyMWA7QX2oojiS745CjREaFk= user@win11-home
秘密鍵 (my-rsa.pem)
-----BEGIN OPENSSH PRIVATE KEY-----
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
-----END OPENSSH PRIVATE KEY-----
はい。問題なく作成されていますね!(今回はテスト用に作成したので秘密鍵を公開しています。この後間違えて使わないように削除してます)
ちなみに拡張子は何でもいいのですが(なくてもよい)分かりやすいように
.pem (秘密鍵)
.pub (公開鍵)
とつけるのがお約束となっています。
※推しの名前などでも何でもいいです!が間違えて公開すると大事故になるので分かりやすいのが一番です。
さてここまできたら。あとは公開鍵 (my-rsa.pub)をサーバー管理者に送ってサーバー側に登録してもらうだけとなります。
共有チャットでも個人チャットでも何でもいいので公開鍵 (my-rsa.pub)の内容をチャットに貼り付けるか添付ファイルとして送りましょう。
ここでサーバー管理者が何をやっているかというと
公開鍵の登録
ログインアカウントのホームにも .ssh フォルダがありそこに authorized_keys というファイルがあります。そこにもらった公開鍵を追加します。
[user-name@ip-10-0-0-1 ~]$ cat my-rsa.pub >> ~/.ssh/authorized_keys
authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCVQzi5jAId+G1sU/ij/KSeihNGkxIwsJ8DV7mHL0bnXOrbkjakCOeXmOrAzVlEVAXaM3wgJbKvjnsqFGSXxUBJaqzD/IzI11B5w2iPqUjmabLwIkP68DTfg7G1oLvW/oGwM/yljtHdHzgfnyoJ1Rsn+jHV+t9CfXaWvTMwHl/x2j0+XiPwUragaRg/eacbFW+p4HVUP779C+fzUcE7uS7Vx/VcBmvwg3Oa0lBxabM3DL5cgMzQ9E06TeClTxqyj1tYEsly04vF3Oa/bTSE2c2sUkTF2qfV23jqUNrUVx+GDRaXbX5lOh/An5La5jYkXexHs1VBvi6bRFi8yhfcumuMknaqZpMrJAc242f8bBHeN5TAER0L6ZdIsjvAXmWgih8Q29De/Hbb1gRM7axEraPDSjdCg5dAziRn5JtkCoxhLG6HcZfrrz6lgboleHPlu5gJilRn29d+XA0V2waqpDwmpLoFDYNRe1MCEQGQ8aoKyMWA7QX2oojiS745CjREaFk= user@win11-home
今回は一行だけですが下にどんどん追加していけば複数登録が可能です。たとえば www-user のようなアカウントを1つ作成して開発者やデザイナーなど複数の人が利用する場合などは複数登録します。
さて全ての準備が整いました!ターミナルから「ssh -i 秘密鍵 -l アカウント名 サーバーのIPアドレス 」を入力して接続してみましょう。
PS C:\Users\user> ssh -i ~/.ssh/my-key.pem -l user-name 10.0.0.1
ED25519 key fingerprint is SHA256:******************************************.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?
はい。何やらでてきましたね。初回はフィンガープリントの確認メッセージが表示されますが慌てず「yes」と入力します。
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
はい。これで無事接続されたかと思います!(フィンガープリントは ~/.ssh/known_hosts へ保存されます。サーバーのIPなどが変更された際は差異がエラーとなりますのでこちらのファイルを編集します。登録が一台だけならファイルを削除してもかまいません)
たしかに接続はされたけど。。。
毎回この長ったらしいコマンドを入力するのは億劫だしそもそもサーバーのIPアドレスなんてお昼ご飯を食べたらもう忘れてるし。。。ごもっともです。そしてだれもこんな使い方はしていません。
config を作ろう!
鍵が置いてある .ssh の中に以下のような config ファイルを作成します。Host のところは好きな名前でかまいせん。それこそ推しの名前でも何でも。色々な名前を付けたい場合はスペースで区切って名前をつづけて入力します。
PS C:\Users\user> cat ~/.ssh/config
Host my-server
HostName 10.0.0.1
User user-name
Port 22
IdentityFile ~/.ssh/my-key.pem
config
Host my-server
HostName 10.0.0.1
User user-name
Port 22
IdentityFile ~/.ssh/my-key.pem
それでは接続してみましょう。ターミナルで「ssh my-server」と入力します。
PS C:\Users\user> ssh my-server
はい。おつかれさまでした!無事接続できましたでしょうか?
最後に接続したいサーバーはどんどん増えていくと思います。その場合は config の下に同じような記載を続けて登録していきます。またサーバー毎にアカウント名が違う場合も User をそれに合わせて入力します。
config (複数ある場合)
Host my-server1
HostName 10.0.0.1
User user-name1
Port 22
IdentityFile ~/.ssh/my-key.pem
Host my-server2
HostName 10.0.0.2
User user-name2
Port 22
IdentityFile ~/.ssh/my-key.pem
終わりに
いかがでしたでしょうか?
今回はインフラ作業で必須といってもよいssh接続についてご紹介させていただきました!サーバーにログインして運用中のサーバーのログを確認したり設定ファイルを書き換えたりと作業は多岐にわたります。
インフラ作業の初めの一歩、まずはぜひssh接続をマスターしてみてください!