🙌
ssh接続時の鍵認証設定
ssh接続時の鍵認証の設定方法についてまとめる。
鍵認証の設定をしておくことでssh接続時のパスワードによる認証をスキップできるので、頻繁にアクセスするマシンにおいては設定しておくと良い。
なお、以降ではクライアントをWindows、ホストをLinux(Ubuntu 22.04LTS)として説明を進める。
クライアント側
まずは鍵の作成。
cd %USERPROFILE%\.ssh
ssh-keygen -t rsa -N "" -f id_rsa_temp
-
-t rsa
で暗号化形式をrsa
に設定 -
-N ""
でパスフレーズなしで鍵を作成
※-N ''
のようにシングルクォーテーションにしてしまうとシングルクォーテーション自体がパスフレーズとして登録されてしまうので注意
作成した鍵をscp
コマンドでホストに転送。
scp %USERPROFILE%\.ssh\id_rsa_temp.pub [USER_NAME]@[HOST_IP_ADDRESS]:~/.ssh/
リモートホスト側
受信した公開鍵を~/.ssh/authorized_keys
に登録する。
chmod 700 ~/.ssh # デフォルトで設定されているので必要なし
cat ~/.ssh/id_rsa_temp.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys # 所有者の読み書きのみ許可
併せてsshデーモンの設定ファイルの編集
sudo vim /etc/ssh/sshd_config
PubkeyAuthentication
とAuthorizedKeysFile
のコメントアウトを外す。
PubkeyAuthentication yes
# Expect .ssh/authorized_keys2 to be disregarded by default in future.
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
手動で編集が面倒であれば以下のコマンドを実行
※下の例では置換前のファイルを*.bak
として保存するようにしている。
sudo sed -i.bak "s/#PubkeyAuthentication yes/PubkeyAuthentication yes/" /etc/ssh/sshd_config
sudo sed -i.bak "s/#AuthorizedKeysFile/AuthorizedKeysFile/" /etc/ssh/sshd_config
編集後、sshd
の再起動
sudo service sshd restart
これでリモートホスト側の設定は完了。
クライアント側
戻ってクライアント側、鍵認証を使ってssh接続できるかを確認
ssh -i C:\\Users\\kabac\\.ssh\\id_rsa_temp [REMOTE_HOST_USER_NAME]@[REMOTE_HOST_IP_ADDRESS]
パスワードを聞かれずに接続出来れば正しく設定ができている。
毎回、鍵を参照してssh接続するのは面倒なので%USERPROFILE%\.ssh\config
に接続情報を書きこんでおく。
%USERPROFILE%\.ssh\config
Host [REMOTE_HOST_ALIAS]
User [REMOTE_HOST_USER_NAME]
HostName [REMOTE_HOST_IP_ADDRESS]
IdentityFile ~/.ssh/id_rsa_temp
※windowsだが、IdentityFile
へのパスはLinux形式のパスで記述しても問題なく読み込むことが可能。
vs codeでのssh接続は%USERPROFILE%\.ssh\config
からホストの接続情報を読み込んで接続可能なのでvs codeでもパスワードなしでssh接続が可能。
Discussion