web-dev-qa-db-ja.com

ssh-agentが後で使用するために暗号化されていないキーを保存しないのはなぜですか?

ヘッドレス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
12
Treffynnon

エージェントが起動していても、特定の環境変数が設定されていない場合、エージェントへの参照はありません。さらに、すべてが問題なく、エージェントおよび変数であっても、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グラフィカルインターフェイスの恩恵を受けることができます。

10
enzotib

私は最近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内の他のディレクトリを指定できます。

2
rabexc

この質問には SuperUser で非常に良い答えがあります。

キーチェーンを使用するためのヒント が非常に便利だとわかりました。

1
metakermit