SSH経由のログインでssh-agentとssh-addを実行する簡単な方法?


38

ssh経由でサーバーにログインするときに、次のコマンドを自動実行しようとしています。

ssh-agent /bin/bash
ssh-add ~/.ssh/id_rsa

私のsshキーにはパスフレーズがあり、ログインごとに1回入力しても問題ありません。

これを.bashrcファイルに入れようとしましたが、ssh-agentは新しいbashセッションを開始すると考えています。これを.bashrcに入れてからログインしようとすると、スタックしてしまい、「exit」と入力して「enter passphrace to unlock key」プロンプトを表示する必要があります

他の提案はありますか?

サーバーはUbuntu LTSを実行しています


サーバー上のキーエージェントが必要な理由 接続元のローカルクライアント上にある必要があります。
ゾレダチェ

@Zoredache git pullリモートサーバー上でできるようにしたいなど
Upvoteをクリックし

次に、ローカルマシンでSSHエージェントを実行し、エージェントを転送します。
ゾレダチェ

@Zoredacheありがとう、それが可能だとは知らなかった。ただし、ローカルマシンからでも、bashスクリプト内からssh-add / ssh-agentを実行できるようにしたいです。これらのコマンドを手動で実行しなければならないのは苦痛です。
賛成票をクリック

回答:


52

これを追加してみてください:

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

この方法でssh-agentは、新しいシェルは起動されず、バックグラウンドで自動的に起動し、シェルコマンドを吐き出して適切な環境変数を設定します。

コメントで述べたように、多分あなたはリモートホスト上でエージェントをまったく実行したくないが、むしろあなたが作業しているボックスで、そして使用したい

ssh -A remote-host

ローカルsshエージェントのサービスをリモートホストに転送します。

セキュリティ上の理由から、信頼できる人が実行するホストでのみエージェント転送を使用する必要がありますが、いつでも完全なエージェントをリモートで実行するよりも優れています。


に置き換えssh-agent /bin/bashssh-agent -sからにしようとするgit pullと、秘密鍵のパスフレーズを求めてロックを解除します。それは本当に私が望むものではありません。ssh-addを行うときにパスフレーズを入力するだけで、gitコマンドを実行するたびにパスフレーズを繰り返す必要はありません。何か案は?
Upvoteクリックして

エージェントをローカルで実行し、ssh -Aを使用することは選択肢ではありませんか?問題は、すべての接続でssh-agentを「再起動」できないことです。あなたがそれを起動するたびに、それは何も「知らないとあなたはときにそれを解読する必要がありますキーをSSH-追加...
トビOetiker

.ssh / configファイルの場合:ホストリモートホストControlMaster自動ControlPath ~/.ssh/master-%l-%r@%h:%p
ControlPersist

1
おっと直上私の答えを更新しました..あなたは、ssh-agentのコールの前に余分にevalを必要とbashで実現
トビOetiker

1
エイリアスを作成できます
トビOetiker

2

1つの選択肢は、Funtooのキーチェーンを使用することです。次に、この1行をbashシェルに貼り付けることができます。

eval $(keychain --eval id_rsa)

サブシェルごとにssh-agentプロセスを実行しないで、同じことを行います(sshエージェントを起動するなど)。代わりに、所有している「実行中の」インスタンスを探し、それらに接続します。

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