認証鍵によるssh接続方法をはじめから丁寧に解説してみる
はじめに
この記事のコマンドはMacかLinuxを想定しています。Windowsでは動かないコマンドが多々あるかもしれませんが、コマンド以外の流れや仕組みとしては同じになるので多少参考にはなると思います。
SSHの鍵認証では、まずクライアント側で公開鍵と秘密鍵のペアを生成し、生成した公開鍵をサーバー側にコピーします。その後、SSH接続を試みるとき、サーバー側は公開鍵によってクライアント側の秘密鍵を検証します。
具体的な手順は以下の通りです:
1. クライアント側で公開鍵と秘密鍵のペアを生成
cd ~/.ssh
ssh-keygen -t rsa -b 4096
これにより ~/.ssh/id_rsa
(秘密鍵)および ~/.ssh/id_rsa.pub
(公開鍵)という2つのファイルが生成されます。
ファイル名を指定したい場合は、
ssh-keygen -t rsa -b 4096 -f id_rsa_file_name
のように書きます。
id_rsa.pub
)をサーバーにコピー
2. 公開鍵(ssh-copy-id -i ~/.ssh/id_rsa_file_name.pub username@your_server_ip
このときにssh接続ができないときは、USBメモリなどを使ってコピーする必要があります。Google Drive等のクラウドを経由してもいいかもしれません。
ここで、username
はサーバーのユーザー名、your_server_ip
はサーバーのIPアドレスです。次にサーバー側に接続して以下の操作をします。
cd ~/.ssh
cat id_rsa_file_name.pub >> authorized_keys
chmod 600 authorized_keys
以上の手順により、SSHの鍵認証が設定されます。これにより、次回からパスワードを入力せずにSSH接続が可能になります。
なお、秘密鍵ファイルは非常に重要なもので、他人に漏れることがないよう十分に注意してください。また、パスワードによる認証を無効にする場合は、秘密鍵ファイルを失ったときに接続できなくなることを考慮してください。
3. 認証鍵で接続してみる
ssh -i ~/.ssh/id_rsa_file_name username@hostname
例として、usernameにはubuntu, hostnamenには192.168.0.11みたいな文字が入ります。
例:
ssh -i ~/.ssh/id_rsa_file_name ubuntu@192.168.0.11
4. オプション:サーバー側のssh設定でパスワードでのログインを禁止するように設定変更
ここはビジネス上ならセキュリティ的にmustですが、個人開発なら自由です。
上記までの操作で認証鍵によるssh接続ができることが確認できたら、パスワードでの接続を禁止しましょう。
sudo vi /etc/ssh/sshd_config
58行目周辺を変更
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes # 変更前
PasswordAuthentication no # 変更後
編集できたらsshを再起動
sudo systemctl restart ssh
これで認証鍵によるssh接続ができたと思います。
5. おまけ: Visual Studio Codeでの設定
Visual Studio Codeでの設定は以下のステップになります。
-
左側のリモートエクスプローラーをクリック
-
上画像の"SSH"の右側にある歯車マークをクリック
-
候補の一番上の
/Users/username/.ssh/config
(Macの場合)をクリック -
設定用コードを書く
ssh接続でssh -i ~/.ssh/id_rsa_file_name ubuntu@192.168.0.11
というコマンドを使っていた場合、設定用コードはVSCode上では以下のように書きましょう。Hostには任意の名前を書けます。
Host Ubuntu
HostName 192.168.0.11
User ubuntu
IdentityFile ~/.ssh/id_rsa_file_name
ちなみに、上記の/Users/username/.ssh/configの編集はVSCode上ではなく以下のコマンドだったり、適当なエディタで直接開いて編集することも可能です。そもそも、~/.ssh/config
ファイルは本来VSCodeだけのためではなくssh接続の設定ファイルとして一般的なものです。以下コマンドはvimで編集する際の例です。vimの使い方は別途調べてください。
vi ~/.ssh/config
おわりに
いかがだったでしょうか。これでは動かない、おかしいということがあったらTwitterの方にご連絡ください。
Discussion