特定のユーザー(つまり、私)からのすべてのログインが同じssh-agentを使用するようにする便利な方法はありますか?ほとんどの場合、この作業を行うためにスクリプトをハックしましたが、今まで見逃していた方法があると疑っていました。さらに、それ以来、たとえばこのWebサイトのように、コンピューティングテクノロジーの驚くべき進歩がありました。
だからここの目標は
- SSH経由であるか、gdm / kdm / etcから開始されたグラフィカルセッションであるか、またはコンソールであるかに関係なく、ボックスにログインするたびに:
- ユーザー名が現在
ssh-agent
実行されていない場合は、ユーザー名が開始され、環境変数がエクスポートされ、ssh-add
呼び出されます。 - それ以外の場合、既存のエージェントの座標はログインセッションの環境変数にエクスポートされます。
- ユーザー名が現在
この機能は、問題のボックスがssh
3番目のボックスに入るときに中継ポイントとして使用される場合に特に役立ちます。この場合、sshを実行するたびに秘密鍵のパスフレーズを入力し、その後、たとえばgit push
何かをする必要がなくなります。
Xがクラッシュし、別のグラフィカルセッションを開始したときに最近失敗したものの、以下のスクリプトはほとんど確実にこれを行います。その場合、他のねじれが起こっている可能性があります。
これが、私が悪いと思うスクリプトです。私はこれを私のソースから入手し.bashrc
ます。
# ssh-agent-procure.bash
# v0.6.4
# ensures that all shells sourcing this file in profile/rc scripts use the same ssh-agent.
# copyright me, now; licensed under the DWTFYWT license.
mkdir -p "$HOME/etc/ssh";
function ssh-procure-launch-agent {
eval `ssh-agent -s -a ~/etc/ssh/ssh-agent-socket`;
ssh-add;
}
if [ ! $SSH_AGENT_PID ]; then
if [ -e ~/etc/ssh/ssh-agent-socket ] ; then
SSH_AGENT_PID=`ps -fC ssh-agent |grep 'etc/ssh/ssh-agent-socket' |sed -r 's/^\S+\s+(\S+).*$/\1/'`;
if [[ $SSH_AGENT_PID =~ [0-9]+ ]]; then
# in this case the agent has already been launched and we are just attaching to it.
##++ It should check that this pid is actually active & belongs to an ssh instance
export SSH_AGENT_PID;
SSH_AUTH_SOCK=~/etc/ssh/ssh-agent-socket; export SSH_AUTH_SOCK;
else
# in this case there is no agent running, so the socket file is left over from a graceless agent termination.
rm ~/etc/ssh/ssh-agent-socket;
ssh-procure-launch-agent;
fi;
else
ssh-procure-launch-agent;
fi;
fi;
これを行うより良い方法があることを教えてください。また、不整合/失theを軽視しないでください(例:var
ものを入れるetc
)。私はこれを少し前に書いて以来、多くのことを学びました。