Windows のユーザー tanaka が Linux マシン svr(IP アドレス:192.168.1.5)に tanaka のアカウントでログインするケースを例に次のコマンドで SSH 公開鍵認証を行うための設定について記す。VSCode の Remote Development を利用するユーザーにとっては必須の設定である。
% ssh svr
既製の鍵の確認
ログイン時に保管庫内の秘密鍵を参照する ssh-agent というサービスを利用する。このサービスが実行されているか否かは次のコマンドで確認することができる。
% sc query ssh-agent
ここで STATE が STOPPED になっている場合は管理者としてコマンドプロンプトを開いて次のコマンドを実行した後にウィンドウを閉じる。
% sc start ssh-agent
元のコマンドプロンプトに戻り ssh-add コマンドで鍵の登録状況を確認する。
% ssh-add -l
ここで何も表示されない場合は次項に進み、カレントディレクトリに拡張子が .pub
であるファイルが存在する場合1は「公開鍵の転送」に進む。これが存在しない場合は次のコマンドを実行して公開鍵を再生したうえで「公開鍵の転送」に進む。
% powershell -command "ssh-add -L | select-object -first 1" | findstr /v /r /c:"^\ *$" > id_rsa.pub
鍵の生成・登録
ssh-keygen を実行して .ssh
に秘密鍵 id_rsa
と公開鍵 id_rsa.pub
を生成する。
% cd C:\Users\suzuki\.ssh
% ssh-keygen
この際「Enter passphrase (empty for no passphrase):」と「Enter same passphrase again:」に対してはパスフェーズ(例えば win)を入力する。
次いで以下のコマンドで秘密鍵を ssh-agent に登録する。途中「Enter passphrase for id_rsa:」に対して上記のパスフェーズを入力する。
% ssh-add id_rsa
公開鍵の転送
過去に IP アドレスが 192.168.1.5 のサーバーとの接続があると失敗するので、念のためこれをチェックしたうえで scp コマンドで svr に公開鍵を転送する。
% ssh-keygen -R 192.168.1.5
% scp id_rsa.pub tanaka@192.168.1.5:/home/tanaka
パスワードの入力後に表示される「Are you sure you want to continue connecting (yes/no/[fingerprint])?」に「yes」で応答すると svr のサーバーのホスト鍵が .ssh\known_hosts
に追加される。
公開鍵の登録
パスワード認証で svr にログインする。
% ssh tanaka@192.168.1.5
/home/tanaka/
に .ssh
ディレクトリが存在しない場合は以下を実行する。
$ mkdir .ssh
$ touch .ssh/authorized_keys
$ chmod 700 .ssh
$ chmod 600 .ssh/authorized_keys
転送済の id_rsa.pub
を .ssh/authorized_keys
に追加する。
$ cat id_rsa.pub >> .ssh/authorized_keys
$ rm id_rsa.pub
$ exit
最終テスト
交換鍵認証での接続をテストする。
% ssh -vA tanaka@192.168.1.5
パスワードが求められる場合は「Cntrl+c」で接続を絶ち、表示されているログから原因をつきとめて対処する。
成功した場合は秘密鍵を削除する。
% del id_rsa
.ssh\config の編集
入力を簡略化するため .ssh\config
に以下の行を追加する。以降、どこからでも冒頭に示したコマンドで svr との交信が可能になる。
Host svr
Hostname 192.168.1.5
User tanaka
ForwardAgent yes
-
ファイル名が
id_rsa.pub
以外である場合は以下に記事におけるid_rsa.pub
をそれに置き換える。 ↩