GNU/Linux >> Linux の 問題 >  >> Linux

ssh-agent が既に bash で実行されているかどうかを確認するには?

<ブロック引用>

また、これらすべてに加えて、既存の ssh-agent プロセスを見つけて、そこに私のキーを追加することは可能ですか?

はい。接続情報をファイルに保存できます:

# Ensure agent is running
ssh-add -l &>/dev/null
if [ "$?" == 2 ]; then
    # Could not open a connection to your authentication agent.

    # Load stored agent connection info.
    test -r ~/.ssh-agent && \
        eval "$(<~/.ssh-agent)" >/dev/null

    ssh-add -l &>/dev/null
    if [ "$?" == 2 ]; then
        # Start agent and store agent connection info.
        (umask 066; ssh-agent > ~/.ssh-agent)
        eval "$(<~/.ssh-agent)" >/dev/null
    fi
fi

# Load identities
ssh-add -l &>/dev/null
if [ "$?" == 1 ]; then
    # The agent has no identities.
    # Time to add one.
    ssh-add -t 4h
fi

このコードは、現在行っていること、このアプローチの落とし穴、およびこれを行うために ssh-ident を使用する方法の両方を説明する ssh エージェントの落とし穴からのものです。

ssh-agent が実行されていない場合にのみ実行し、それ以外の場合は何もしない場合:

if [ $(ps ax | grep [s]sh-agent | wc -l) -gt 0 ] ; then
    echo "ssh-agent is already running"
else
    eval $(ssh-agent -s)
    if [ "$(ssh-add -l)" == "The agent has no identities." ] ; then
        ssh-add ~/.ssh/id_rsa
    fi

    # Don't leave extra agents around: kill it on exit. You may not want this part.
    trap "ssh-agent -k" exit
fi

ただし、これは ssh-agent を保証しません。 アクセス可能になります (実行中だからといって $SSH_AGENT_PID があるとは限りません) ssh-add の場合 に接続します)


いいえ、本当に、ssh-agent かどうかを確認する方法 は既に bash で実行されていますか?

これまでの回答は元の質問に回答していないようです...

これが私にとってうまくいくものです:

if ps -p $SSH_AGENT_PID > /dev/null
then
   echo "ssh-agent is already running"
   # Do something knowing the pid exists, i.e. the process with $PID is running
else
eval `ssh-agent -s`
fi

これはここから取得されました


スクリプトが終了した直後に強制終了したい場合は、eval 行の後にこれを追加するだけです:

trap "kill $SSH_AGENT_PID" exit

または:

trap "ssh-agent -k" exit

$SSH_AGENT_PID ssh-agent -s の eval で設定されます .

実行中の ssh-agent を見つけることができるはずです /tmp/ssh-* をスキャンして SSH_AGENT を再構築します それからの変数 (SSH_AUTH_SOCK および SSH_AGENT_PID ).


ps -p $SSH_AGENT_PID > /dev/null || eval "$(ssh-agent -s)"

単一行コマンド。初めて実行すると、ssh-agent が起動します。 2 回目の実行では、ssh-agent は開始されません。シンプルでエレガントなメイト!!!


Linux
  1. 実行/インストールされているPostgresのバージョンを確認する方法

  2. 特定のサービスが Ubuntu で実行されているかどうかを確認する方法

  3. 現在実行中のシェルが BusyBox かどうかを確認する方法

  1. 同じが実行されている場合はプロセスを確認しますか?

  2. Cpの実行の進行状況を確認する方法は?

  3. シェルスクリプトBashでサブストリングをチェックする方法は?

  1. Bashが色を印刷できるかどうかを確認する方法は?

  2. Telnetがサーバーで実行されているかどうかを確認する方法

  3. 文字列にBashの部分文字列が含まれているかどうかを確認する方法