🙌

ssh接続時の鍵認証設定

2023/08/08に公開

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

PubkeyAuthenticationAuthorizedKeysFileのコメントアウトを外す。

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接続が可能。


reference

Discussion