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


12

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

1
まず、あなたが言ったように、かどうかを確認ssh-agent実行されている:ps -ef | grep '[s]sh-agent'
スコット退職

@msseverはい、そうです。更新された質問を参照してください。
トレフィノン

回答:


10

エージェントが起動していても、特定の環境変数が設定されていないと、エージェントへの参照がありません。さらに、すべてが問題なく、エージェントおよび変数であっても、IDは自動的にエージェントに送信されません。つまりssh-askpass、Xセッションでのみ動作するのタスクです。

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です。


@enzotibに感謝しsshます。他のマシンに接続するのに最適です。ただしgit、パブリックリポジトリをプッシュまたはプルするために使用する場合はそうではありません。私もそれをどのように解決することができますか?
トレフィノン

と同じ関数を追加しssh()、呼び出しgit()、最後の行をから/usr/bin/sshに変更し/usr/bin/gitます。また、最後の行をで追加しexport -f gitます。
-enzotib

@enzotib私はそれを試してみましたが、今、上記のセットアップで作成sshしたbash_profileファイルを使ってマシンに入ると、キーのパスワードを尋ねられます。何らかの理由で、今、私はそれにsshをするたびに、私が実行しても前に尋ねますsshgit。問題のあるマシンにログインしたときに返されるプロンプトについては、gist.github.com / 942082を参照してください。
トレフィノン

@Treffynnon:どのようにgit相互作用するのか正確にはわかりませんしsshgit試用できないように使用しません。以前の説明が明確になるように、上記~/.bash_profilegit()関数を含めるように変更しました。また、出力からサーバーマシンを変更したように見えますが、私のアドバイスはすべてクライアントマシンのみに向けられています。
-enzotib

@enzotibそれは正しいです。ログインしたサーバーgitは、そこから中央のフォージ/リポジトリにプッシュするとクライアントになり、ファイルが適切な場所に配置されます。あなたはちょうど私にヒントを与えた/私の考えをジョギングしたと思います。のgitブランチを表示する特別なbashプロンプトがありますpwd。私は、bashプロンプトを表示する前にstatをgitしようとするため、bashログインでパスワード要求をトリガーしているのは間違いないでしょう!
トレフィノン

2

私は最近ssh-identを使い始めました:

https://github.com/ccontavalli/ssh-ident

あなたがしなければならないのは、次のようなものを追加することです:

alias ssh="/path/to/ssh-ident"

あなたの.bashrc。別の方法として、次のことができln -s /path/to/ssh-ident ~/bin/sshたりする前に、PATHに他のディレクトリ/bin/usr/bin


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.