ヘッドレスUbuntuサーバーから別のサーバーにSSH接続するたびに、キーファイルのパスワードを求められます。以前にサーバーに接続したことがある場合でも。
これがなぜなのか、ご存知ですか?現在実行されていないssh-agent
のような単純なものか、何かである可能性があります。
Ubuntu Gnomeデスクトップの同じキーが正常に機能しています。サーバーとデスクトップの両方がUbuntu 10.10を実行しています。
ps -ef | grep '[s]sh-agent'
simon 3219 1 0 12:46 ? 00:00:00 ssh-agent
エージェントが起動していても、特定の環境変数が設定されていない場合、エージェントへの参照はありません。さらに、すべてが問題なく、エージェントおよび変数であっても、IDは自動的にエージェントに送信されません。これは、Xセッションでのみ機能するssh-askpass
のタスクです。
Bashを使用している場合は、次の内容のファイル~/.bash_profile
を作成します。
# File: ~/.bash_profile
# source ~/.profile, if available
if [[ -r ~/.profile ]]; then
. ~/.profile
fi
# start agent and set environment variables, if needed
agent_started=0
if ! env | grep -q SSH_AGENT_PID >/dev/null; then
echo "Starting ssh agent"
eval $(ssh-agent -s)
agent_started=1
fi
# ssh become a function, adding identity to agent when needed
ssh() {
if ! ssh-add -l >/dev/null 2>&-; then
ssh-add ~/.ssh/id_dsa
fi
/usr/bin/ssh "$@"
}
export -f ssh
# another example: git
git() {
if ! ssh-add -l >/dev/null 2>&-; then
ssh-add ~/.ssh/id_dsa
fi
/usr/bin/git "$@"
}
export -f git
必要に応じてファイル名~/.ssh/id_dsa
を変更し、この行を~/.bash_logout
に追加します
# stuff to add at end of ~/.bash_logout
if ((agent_started)); then
echo "Killing ssh agent"
ssh-agent -k
fi
最後の注意:これはgnomeセッションに干渉しません。その場合、~/.profile
のみがソースとなるため、パスフレーズを要求してssh-askpass
に送信するssh-agent
グラフィカルインターフェイスの恩恵を受けることができます。
私は最近ssh-identを使い始めました:
https://github.com/ccontavalli/ssh-ident
あなたがしなければならないのは、次のようなものを追加することです:
alias ssh="/path/to/ssh-ident"
.bashrc
で。または、ln -s /path/to/ssh-ident ~/bin/ssh
または/bin
の前に/usr/bin
またはPATH内の他のディレクトリを指定できます。
この質問には SuperUser で非常に良い答えがあります。
キーチェーンを使用するためのヒント が非常に便利だとわかりました。