今回は、「ssh」コマンドの公開鍵認証で使用する鍵ファイルにパスフレーズが設定されているときは、使用するごとにパスフレーズを入力する必要があります。このパスフレーズの入力を省略する方法を紹介していきます。
「ssh」コマンドで公開鍵認証を使用する例は、次のようになります。
$ ssh -i ~/.ssh/id_rsa username@hostname
Enter passphrase for key '/home/username/.ssh/id_rsa':
「-i」オプションに使用する鍵ファイルを指定します。指定した鍵ファイルにパスフレーズが必要な場合は、パスフレーズの入力を求められるため「Enter passphrase for key ...」が表示されます。
また、パスフレーズの入力を一定回数誤ると次のようなエラーが出力されます。
username@hostname: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
検証環境
検証に使用した環境/ライブラリを次に記載します。
- Ubuntu
- バージョン:20.04.2 LTS
- ssh
- OpenSSH_8.2p1 Ubuntu-4ubuntu0.2, OpenSSL 1.1.1f 31 Mar 2020
秘密鍵の登録成功
公開鍵認証でパスフレーズを省略するためには、「ssh-add」コマンドを使用して秘密鍵の情報を登録することで省略することができるようになります。
「ssh-add」コマンドを使用して登録する例は、次のようになります。
$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/username/.ssh/id_rsa:
Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)
- 「ssh-add」コマンドに登録する秘密鍵ファイルを指定します。
- パスフレーズの入力が求められるため正しい情報を入力します。
- 登録に成功した場合は「Identity added」に続いて登録した秘密鍵ファイルの情報が表示されます。
登録成功後は、「ssh」コマンドを使用して、パスフレーズの入力を求められることなく接続できることを確認してみてください。
秘密鍵の登録失敗
「ssh-add」コマンドを使用したときに登録失敗することがあります。検証した時に発生した問題と解決方法を紹介していきます。
「Could not open a connection to your authentication agent.」が表示される
「ssh-add」コマンドを使用したときに、次のような結果になることがあります。
$ ssh-add ~/.ssh/id_rsa
Could not open a connection to your authentication agent.
「Could not open a connection to your authentication agent.」が発生した場合は、「ssh-agent」が起動していない可能性があります。
「ssh-agent」を起動する
「ssh-agent」の起動は、「ssh-agent」コマンドを実行するとプログラムが起動します。実行したときの例は、次のようになります。
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-As5g9jkw8mmq/agent.6850; export SSH_AUTH_SOCK;
SSH_AGENT_PID=6851; export SSH_AGENT_PID;
echo Agent pid 6851;
ただし、この状態で「ssh-add」コマンドを実行しても同じ問題が発生します。「ssh-agent」コマンドを実行した後は、画面に出力された情報を環境変数として設定する必要があります。
環境変数を設定する
表示された情報を環境変数に設定する例は、次のようになります。
$ SSH_AUTH_SOCK=/tmp/ssh-As5g9jkw8mmq/agent.6850; export SSH_AUTH_SOCK;
$ SSH_AGENT_PID=6851; export SSH_AGENT_PID;
環境変数に設定した後は、「ssh-add」コマンドを使用して登録することができるようになります。
$ ssh-add ~/.ssh/id_rsa
Enter passphrase for key '/home/username/.ssh/id_rsa':
Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)
登録成功後は、「ssh」コマンドを使用して、パスフレーズの入力を求められることなく接続できることを確認してみてください。
「Error connecting to agent: No such file or directory」が表示される
「ssh-add」コマンドを使用したときに、次のような結果になることがあります。
$ ssh-add ~/.ssh/id_rsa
Error connecting to agent: No such file or directory
「Error connecting to agent: No such file or directory」が発生した場合は、環境変数に設定されている「SSH_AGENT_PID」の値と一致する「ssh-agent」のプロセスが存在していない可能性があります。
環境変数を確認する
設定されている環境変数を確認するためには、「printenv」コマンドを使用することで確認することができます。実行したときの例は、次のようになります。
$ printenv | grep SSH_
SSH_AUTH_SOCK=/tmp/ssh-VMOg0SzDyXQN/agent.70
SSH_AGENT_PID=71
出力された例では、「SSH_AGENT_PID=71」と出力されています。この値は、実行しているプログラムを識別するために割り当てられているプロセスIDと呼ばれるものになります。
「ssh-agent」プロセスを確認する
「ssh-agent」のプログラムを確認するためには、プロセスを確認するための「ps」コマンドなどで確認することができます。「ps」コマンドの実行例は、次のようになります。
$ ps -e | grep ssh-agent
103 ? 00:00:00 ssh-agent
出力された例では、「ssh-agent」のプロセスが存在していることを確認できます。プログラムに割り当てられているプロセスIDは、先頭に表示されている「103」になります。
環境変数とプロセス確認の結果から、プロセスIDの値が一致しないことを確認することができました。
「ssh-agent」プロセスの起動と環境変数を再設定する
「ssh-agent」コマンドを実行することで新しいプロセスを起動することができます。
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-As5g9jkw8mmq/agent.6850; export SSH_AUTH_SOCK;
SSH_AGENT_PID=6851; export SSH_AGENT_PID;
echo Agent pid 6851;
「ssh-agent」コマンドを実行した後は、画面に出力された情報を環境変数として設定する必要があります。表示された情報を環境変数に設定する例は、次のようになります。
$ SSH_AUTH_SOCK=/tmp/ssh-As5g9jkw8mmq/agent.6850; export SSH_AUTH_SOCK;
$ SSH_AGENT_PID=6851; export SSH_AGENT_PID;
環境変数に設定した後は、「ssh-add」コマンドを使用して登録することができるようになります。
$ ssh-add ~/.ssh/id_rsa
Enter passphrase for key '/home/username/.ssh/id_rsa':
Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)
登録成功後は、「ssh」コマンドを使用して、パスフレーズの入力を求められることなく接続できることを確認してみてください。
まとめ
「ssh」コマンドで公開鍵認証を使用するときにパスフレーズの入力を省略する方法を紹介しました。