tty2にbashセッションがあり、ssh-agent
以前のセッションで私に属していたプロセス(同じユーザーID)があります(TTY = ?)。
tty2では、次のようにssh-add
言います。
Could not open a connection to your authentication agent.
eval $(ssh-agent)
すでに実行中のプロセスがあっても、ログインするたびにプロセスを開始する必要がありますかssh-agent
?しかし、最終的にはssh-agent
多くのプロセスインスタンスが実行されます。 :-(
編集:すでに実行されているプロセスを使用したいですssh-agent
。
次のように、すでに実行中のアイテムに連絡する方法を見つけましたssh-agent
。
export SSH_AUTH_SOCK=$(find /tmp/ssh-*/ -user $USER -type s -name "agent.*" 2>/dev/null | head -1)
export SSH_AGENT_PID=$(echo $SSH_AUTH_SOCK | cut -d. -f2)
しかし、これが非常に安全かどうかはわかりません。
編集2:このコマンドを実行するたびに、コマンドはeval $(ssh-agent)
プロセスの新しいインスタンスを起動します。ssh-agent
答え1
ssh-agent 出力を同時に評価して保存できます。
eval $(ssh-agent | tee agent.env)
その後、他の端末またはその後のセッションで
source agent.env
よりセキュリティを強化するために権限を強化します。
chmod go-rwx agent.env
答え2
まず、SSHセッションでこれを行っていますか?その場合は、ssh-agentを有効または無効にすることができます。このオプションは、ホストのSSHエージェントをリモートサーバーに転送します。これにより、SSHキーをリモートサーバーにコピーする必要さえありません。ssh -A [email protected]
-A
元の質問に戻って:これを実行する際の問題は、ssh-agent
基本的に毎回異なるランダムなソケット名を使用することです。あなたが望むのは、ssh-agent -a
固定コンセントを提供するオプションを使用することです。その後、数回呼び出しても他のssh-agentは起動しません。
これは常に同じssh-agentを再利用するか、ssh-agentが実行されていない場合に起動する単純なスクリプトです。また、この3行を1行のエイリアスに簡単に組み合わせることもできます。
# set SSH_AUTH_SOCK env var to a fixed value
export SSH_AUTH_SOCK=~/.ssh/ssh-agent.sock
# test whether $SSH_AUTH_SOCK is valid
ssh-add -l 2>/dev/null >/dev/null
# if not valid, then start ssh-agent using $SSH_AUTH_SOCK
[ $? -ge 2 ] && ssh-agent -a "$SSH_AUTH_SOCK" >/dev/null