回答:
ssh-agentはセッションを開始し、終了するとユーザーセッションが終了することになっています。したがって、ssh-agentの後のコマンドは、おそらくログオフ後に実行されます。
あなたが望むのは、次のsession-script
ようなセッションコマンドを含むものです:
#!/bin/bash
ssh-add /path/to/key
bash -i # or other session starter
次に開始しssh-agent session-script
ます。
スクリプトの先頭に次を追加します。
eval `ssh-agent`
スクリプトは次のようになります。
#!/bin/bash
eval `ssh-agent`
ssh-add /path/to/key
...
...
説明
周辺のバックティックはssh-agent
出力を収集します。eval
その出力を収集し、単一のコマンドに連結してから、コマンドを実行します。次にssh-add
、キー資格情報を提供するために使用できます。
eval $(ssh-agent)
bash -i
、スクリプトの最後に置くまで機能しませんでした。
私はエージェントを必要とするスクリプトでこのようなことをする傾向があります。
#!/bin/bash
# if we can't find an agent, start one, and restart the script.
if [ -z "$SSH_AUTH_SOCK" ] ; then
exec ssh-agent bash -c "ssh-add ; $0"
exit
fi
... and so on.
基本的に、スクリプトが最初に行うことは、エージェントが実行されているかどうかを確認することです。そうでない場合は、execを使用して、スクリプトの代わりに新しいプロセスを開始します。エージェントが開始され、キーが追加され、最後にスクリプトが再度呼び出されます(を参照$0
)。
.. "ssh-add ; $0 $*"
または、.. "ssh-add ; $0 $@"
代わりに使用できます。これは完全ではありませんが、多くの場合に確実に機能します。最善の解決策は、とにかく他の何かの前にエージェントを実行することです。これは、あいまいな場合に役立つかもしれません。
この場合、キーチェーンを使用することをお勧めします
Debian / Ubuntu:
apt-get install keychain
RHEL / Fedora / CentOS
yum install keychain
.bashrcに次を追加します。
eval `keychain --eval id_rsa`
私はたくさん試してみましたが、最終的に機能した解決策は、パスフレーズを空の文字列に置き換えることでした。
ssh-keygen -p
exit
ことでトリックを行いました。