ssh-agentを別の画面にわたって接続状態に保つ方法はありますか?

ssh-agentを別の画面にわたって接続状態に保つ方法はありますか?

パスワードのないログインにssh-agentを使用するたびに、異なるログインセッションと画面セッションが同時に進行しても機能しません。

他のセッションで動作しないいくつかのシェル変数を使用しているようです。これを設定したり、すべてのセッションに表示される変数の一種を使用したりする方法はありますか?

答え1

私はそれを使用して環境変数をkeychain管理しssh-agent、一度に1つのエージェントだけを実行するようにします。.bashrc適切なマシンで私から:

# is this an interactive shell?
if [[ $- == *i* ]]; then
    # set up ssh key server
    if [[ -x /usr/bin/keychain ]]; then
        eval $(keychain --eval --ignore-missing the <keys I want>)
    fi
fi

に環境変数を保存し~/.keychain、見つからない場合はエージェントを実行し、に新しい変数または既存の変数を返しますeval。数年前に設定しましたが、まだ触れていませんね。これをインストールした場合、ssh-askpassキーチェーンを実行しているシェルが表示されなくても(たとえば、X11初期化スクリプトなど)、X11環境でパスワードの入力を求められます。

これを使用する別の方法がありますが、X11にログインしていないときにリモートでワークステーションにログインするなど、複数のLinuxワークステーションでこの方法が機能します。

答え2

はい、sshはSSH_AUTH_SOCK変数を使用してプロキシにアクセスします。

別のセッションで別のエージェントを起動すると、秘密は共有されません。

ssh-agentこのインスタンスで設定した変数を表示するには、実行してください。

man ssh-agent可能なオプションについては、読んでください。 (特に-aがあなたの場合に役立ちます。)

エージェントを共有する最良の方法は、状況によって大きく異なります。 1つのエージェントのみが実行されており、すべてのセッションがそれを有効にしていることを確認してください。

一部のデスクトップ環境を使用する場合は、通常、SSH エージェントが起動され、デスクトップセッション内で開始されたすべてのプロセスで使用できるように環境が設定されます。 - 新しいエージェントをすべてのセッションで共有するには、画面をscreen次のように実行しますssh-agent screen。 - ボックス内でSSH経由でプロキシにアクセスしたい場合でも可能ですが、自分で解決する必要があります。

答え3

誰でもログインプロセスのスクリプトを書くことができます。

  1. (このユーザーに対して)実行中のssh-agentインスタンスが1つ以上あることを確認してください。
  2. 使用するインスタンスの選択(最も古いもの)
  3. このプロセスのソケット情報が利用可能であること(正しい)を確認してください。
  4. 成功したら、自分の環境からこの情報を入手してください。
  5. 他のインスタンスを殺すこともできます(少なくとも独自のインスタンスの場合)。
ps -o pid,etime,args --no-headers --sort=start_time \
  -p $(pgrep --uid $USER ssh-agent) | 
    awk '{print $1; exit;}'

最も古い ssh-agent インスタンスの PID を提供します。これは簡単ですが、pgrep --uid $USER --oldest ssh-agentこれにより他のインスタンスのPIDも簡単に取得できます。

$SSH_AUTH_SOCKファイルに書き込むことができます~/.ssh/env/$PID$SSH_AGENT_PID現在のプロセスが$ PIDと同じ場合)。

echo "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK" > ~/.ssh/env/$PID

他のセッションでは、ファイルが存在し、まだ有効であることを確認してインポートできます。

bash -c 'test -e ~/.ssh/env/$PID || exit 1;
  . ~/.ssh/env/$PID; test -e $SSH_AUTH_SOCK' && . ~/.ssh/env/$PID

答え4

優れた使用ssh-identセキュリティ強化のために複数のIDをサポートします。

次の直接ラッパーですsshscp

ln -s /usr/bin/ssh-ident ~/bin/ssh
ln -s /usr/bin/ssh-ident ~/bin/scp

一つある自分で提案した回答が多い、ところでなぜ車輪を再発明するか。

関連情報