背景
今までパスワード認証でvscodeでのSSH接続を行なっていたが、毎回パスワードを打つのも面倒で、スリープモードにしてしまうとまたパスワードを使って認証する必要がある。
そこで公開鍵認証を用いてvscodeからssh接続を行うことにした。
前提
パスワード認証など、別の方法でサーバーにSSH接続できていること。
手順
1.拡張機能のインストール
左のツールバーから拡張機能のアイコンを選択して、検索欄にremoteと入力して、出てきたRemote - SSH
をインストールする。
2.SSH Keyの作成
ssh-keygen -f ~/.ssh/<key_name>
(例では<key_name>はid_rsa_test)を実行して、公開鍵と秘密鍵を作成する。
この時二つのファイルが~/.ssh
下に作成され、<key_name>.pub
が公開鍵、何も拡張子がついていない<key_name>
が秘密鍵。
$ ssh-keygen -f ~/.ssh/id_rsa_test
Enter passphrase (empty for no passphrase): # Enter
Enter same passphrase again: # Enter
Your identification has been saved in /Users/<user_name>/.ssh/id_rsa_test
Your public key has been saved in /Users/<user_name>/.ssh/id_rsa_test.pub
The key fingerprint is:
SHA256:S0gipjugwxk3hawkyLRxWXMJgF9a6b9i9dAq1snR0A <user_name>@hogehoge.local
The key's randomart image is:
+---[RSA 3072]----+
| E+o=o |
| o .+.= |
| o ...+ + . |
| o ..oo.o .+ |
|o. + o.+S== |
|+.+ + o.=o.. |
|=o + +.+ o . |
| o = + .. o |
| . .. |
+----[SHA256]-----+
$ cd ~/.ssh
$ ls
id_rsa_test.pub id_rsa_test
今回はSSH Keyの暗号方式が主題ではないため、簡易的な鍵を作成しているが、実際に作成する際にはssh-keygen
にオプションを加えた方が良い。
3.SSH Configの設定
/Users/<user_name>/.ssh/config
に以下の内容を追加する。
Host hoge
HostName <server_ip> # 接続先のIPアドレス
User <user_name> # 接続先で使用するUserの名前
StrictHostKeyChecking no
PasswordAuthentication no
PreferredAuthentications publickey
IdentityFile /Users/<user_name>/.ssh/<key_name> # 先ほど作成した秘密鍵の絶対パス
IdentitiesOnly yes
Remote - SSHのアイコンを押してリモートエクスプローラーを開き、右上にある歯車からも開ける。
4.接続先のサーバーに公開鍵をコピーする。
手順2で作成した<key_name>.pub
を接続先の/home/<user_name>/.ssh/authorized_keys
にコピーする。
<key_name>.pub
をコピーして、vim等でファイルを作成してペーストしても良いのだが、コピーミスや権限問題などが起きる可能性があるため、なるべくsftp
等を利用してファイルをそのまま転送するのが良い。
この時、公開鍵のパーミッションが適切でないと公開鍵認証を行えないため、適切にパーミッションを設定する。
$ cd ~/.ssh
$ ls -l # パーミッションの確認
total 4
-rw-rw-r-- 1 <user_name> <user_name> 591 Jun 22 14:46 authorized_keys
$ chmod 600 authorized_keys # 権限修正
$ ls -l # パーミッションが変更されていることの確認
total 4
-rw------- 1 <user_name> <user_name> 591 Jun 22 14:46 authorized_keys
5.vscodeからSSH接続を行う
左下の緑の><
をクリックして、ホストに接続する
(Connect to Host)を選択し、先ほど作成したホスト名(例はHoge)を選択する。
成功していれば、左下の緑の部分にホスト名が表示されている。
接続に失敗した場合は、パスワード認証でログインし、sudo cat /var/log/auth.log
を実行して、エラー原因を探る。
例えば私は、パーミッションの設定がおかしかったため、接続が失敗していた。
$ sudo cat /var/log/auth.log
...
Jun 22 13:57:19 dl-machine sshd[1000]: Authentication refused: bad ownership or modes for file /home/hoge/.ssh/authorized_keys
...
参考資料