認証エージェントへの接続を開けませんでした


1605

私はこのエラーに遭遇しています:

$ git push heroku master
Warning: Permanently added the RSA host key for IP address '50.19.85.132' to the list of known hosts.
!  Your key with fingerprint b7:fd:15:25:02:8e:5f:06:4f:1c:af:f3:f0:c3:c2:65 is not authorized to access bitstarter.

キーを追加しようとしたところ、以下のエラーが発生しました。

$ ssh-add ~/.ssh/id_rsa.pub
Could not open a connection to your authentication agent.

26
質問:このページですべての回答を試しても、どれも機能しません。次に何ができますか?
Brandon Bertelsen、2015年

8
@BrandonBertelsenこれを試してください: $ ssh-agent /bin/sh and $ ssh-add $yourkey
shyam

@BrandonBertelsen次に、git config --list設定したかどうかを確認するために使用するcredential.helper必要があります。ヘルパーが役に立たないため、この設定を削除する必要がある場合。
ヨーヨー

回答:


2383

始めましたssh-agentか?

コマンドssh-agentを実行する前に開始する必要がある場合がありますssh-add

eval `ssh-agent -s`
ssh-add

これにより、Windowsmsysgit Bashのエージェントが起動することに注意してください。別のシェルまたはオペレーティングシステムを使用している場合は、他の回答にリストされているようなコマンドのバリアントを使用する必要がある場合があります

次の回答を参照してください。

  1. ssh-addが不平を言う:認証エージェントへの接続を開けませんでした
  2. Gitプッシュにはユーザー名とパスワードが必要です(ssh-agentの使用方法に関する詳細な手順が含まれています)
  3. (git / ssh)認証エージェントを実行するには?
  4. 認証エージェントへの接続を開けませんでした

ssh-agentを自動的に起動し、単一のインスタンスが複数のコンソールウィンドウで機能するようにするには、「ログイン時にssh-agent起動する」を参照してください。

なぜ私たちはeval代わりに使う必要があるのssh-agentですか?

理由については、Robin Greenの回答をご覧ください。

公開鍵と秘密鍵

また、を使用するときはいつでもssh-add、それに秘密鍵を常に追加します。ファイル~/.ssh/id_rsa.pubは公開鍵のように見えますが、それが機能するかどうかはわかりません。~/.ssh/id_rsaファイルはありますか?テキストエディターで開いた場合、秘密鍵と表示されますか?


18
@xtian私は問題を理解しているかわかりません。正確な詳細はわかりませんが、秘密鍵がネットワーク経由で送信されることはないと思います。ssh-addホストマシンで暗号化された秘密鍵を復号化するだけで、ローカルで使用できるようになると思います。誰にも送信されません。ネットワークを介して送信されるのは公開鍵だけだと思います。私の理解は間違っていますか?

6
あなたは優しすぎるカップケーキです。あなたは絶対的に正しいです。私の悪い。exここ ; ssh-addは、ユーザーのssh-agent(実行中のプロセス)の秘密鍵を追加し、サーバーがrsa-whatever鍵を受け入れるクライアント/ホストの代わりに動作できます。もう。何が私をそんなに興奮させたのか分かりません。
xtian 2013年

22
なぜeval ssh-agent -s機能するのか知りたいのですがssh-agent、それだけでは機能しません。
DanielM 2014年

13
@DanielM:SSHでは、ssh-agentを使用するために2つのものが必要です。バックグラウンドで実行されるssh-agentインスタンスと、エージェント(SSH_AUTH_SOCKIIRC)に接続するために使用するソケットをSSHに指示する環境変数セットです。実行しただけの場合ssh-agent、エージェントは起動しますが、SSHはそれを見つける場所を知りません。
ヴァネッサフィップス14

4
返信ありがとうございます。コマンドでバッククォートを使用していることに気づきました。バッククォート( `)がevalコマンドでは機能するが、bashシェルでは一重/二重引用符( '、")で機能しないのはなぜですか?
Weishi Zeng

540

私は無駄に他の解決策を試しました。さらに調査を行ったところ、次のコマンドが機能することがわかりました。Windows 7とGit Bashを使用しています。

eval $(ssh-agent)

詳細:https : //coderwall.com/p/rdi_wq


14
Windows 8でも動作しました。
Andreas Rudolph

私はWindows 7とGit Bashも使用していますが、私の答えはうまくいきます。この方法でも同じことができるのは素晴らしいことです。

2
すごい !!Windows 10でも動作します。
NitinM

1
Manjaroで
作業

1
$ eval "$(ssh-agent -s)"がWindows 10で動作しました
Andrew Anderson

261

次のコマンドがうまくいきました。CentOSを使用しています。

exec ssh-agent bash

3
おかげで、これは私にとってうまくいきました、私は私のシェルのために「exec ssh-agent zsh」を実行しました。
jasonmcclurg 2014

2
この削除された「回答」によると、Amazon Linux AMIでも機能します。Unix / Linux / * nixソリューションだと思います。

4
私はDockerコンテナーにsshで接続してssh-add my.id_rsa失敗しました。でも問題なくexec ssh-agent zshできる環境ができssh-addました。そして、私は私のドッカーコンテナの中にいます:)
markuz-gj

誰が問題があったのか簡単に説明できますか?ありがとう:)これは私のUbuntu 14.04でも動作しました。
harkirat1892

raspbianにも取り組みました
mega_creamery

215

MsysGitまたはCygwin

MsysgitまたはCygwinを使用している場合は、msysgitおよびcygwinおよびbashのSSH-Agentで優れたチュートリアルを見つけることができます。

  1. と呼ばれるファイル.bashrcをホームフォルダに追加します。

  2. ファイルを開いて貼り付けます。

    #!/bin/bash
    eval `ssh-agent -s`
    ssh-add
    
  3. これは、キーが従来の~/.ssh/id_rsa場所にあることを前提としています。そうでない場合は、ssh-addコマンドの後にフルパスを含めてください。

  4. ~/.ssh/config内容を含むファイルに追加または作成する

    ForwardAgent yes
    

    元のチュートリアルでは、ForwardAgentパラメーターはYesですが、タイプミスです。すべて小文字を使用すると、エラーが発生します。

  5. Msysgitを再起動します。パスフレーズを1回入力するように求められます(セッションを終了するか、ssh-agentが強制終了されるまで)。

Mac / OS X

ターミナルを開くたびに新しいssh-agentを起動したくない場合は、キーチェーンを確認してください。私は今Macを使っているので、チュートリアルのssh-agentとzsh&keychainをMac OS Xで使用して設定しましたが、Google検索でWindowsに関する情報がたくさんあるはずです。

更新:Macでのより良いソリューションは、Mac OSキーチェーンにキーを追加することです:

ssh-add -K ~/.ssh/id_rsa

そのような単純な。


1
参考

1
私が実行eval `ssh-agent -s`すると、cygwinを終了してもプロセスが停止しません。
キリル2014

Windows / gitbashの設定をセットアップする方法はありますか?そのため、毎回それを行う必要はありませんか?
mix3d、2015

4
ps -u $(whoami) | grep ssh-agent &> /dev/null || eval $(ssh-agent)そうでなければなりません-そうでなければ、新しいssh-agentが毎回起動されます。ユーザーがcronjobsを持っていたとき、時々私のマシンを殺しました。
2015

3
ForwardAgent yes信頼されていないサーバーに設定されている場合、これは必要ではなく、非理論的なセキュリティリスクです。キーエージェントへのローカルアクセスは、この設定に関係なく機能します。
SeldomNeedy 2016年

208

認証エージェントへの接続を開けませんでした

このエラーを解決するには:

bash:

$ eval `ssh-agent -s`

tcsh:

$ eval `ssh-agent -c`

次にssh-add、通常どおりに使用します。


ヒント:

上記のssh-agentコマンドの入力内容を常に忘れていたため、次のように.bashrcファイルにエイリアスを作成しました。

alias ssh-agent-cyg='eval `ssh-agent -s`'

を使用する代わりにssh-agent、私は使用することができますssh-agent-cyg

例えば

$ ssh-agent-cyg
SSH_AUTH_SOCK=/tmp/ssh-n16KsxjuTMiM/agent.32394; export SSH_AUTH_SOCK;
SSH_AGENT_PID=32395; export SSH_AGENT_PID;
echo Agent pid 32395;
$ ssh-add ~/.ssh/my_pk

修正の元のソース:

http://cygwin.com/ml/cygwin/2011-10/msg00313.html


3
eval以前に実行したことがあるたびにコマンドを実行する必要がありますssh-agent。現在、エイリアスを使用しています。これを行う方法については、更新された回答を参照してください。
クリススノー

1
参考

httpsの代わりにssh仕様を使用する必要もありました(help.github.com/articles/changing-a-remote-s-urlを参照)
RunHolt

1
あなたはサー、あなたは素晴らしいです。ありがとう。** bitbucketリポジトリのクローンを作成しているときに同じ問題に直面しました。すでにsshキーを設定していましたが、エラーが発生し続けました:fatal: Could not read from remote repository.
Nishant Ghodke 2017年

窓10とのgit bashのインストールに私のために働いた
desmond13

116

私はLinuxでも同じ問題に直面しましたが、これが私がしたことです:

基本的に、コマンドssh-agentはエージェントを起動しますが、実行するための環境変数は実際には設定しません。それらの変数をシェルに出力するだけです。

必要がある:

eval `ssh-agent`

次にssh-addを実行します。認証エージェントへの接続を開けませんでしたをご覧ください。


1
参考

Windowsでboot2dockerを使用する際に問題が発生している間も私のために働きました
Veve

これが私にとって必要なことでした。
トム

115

ssh-addおよびssh(openssh実装を使用していると想定)には、sshエージェントとの通信方法を知るための環境変数が必要です。現在使用しているものとは異なるコマンドプロンプトウィンドウでエージェントを開始した場合、またはエージェントを誤って開始した場合、ssh-addもsshもその環境変数セットを認識しません(環境変数がコマンドにローカルに設定さているため)それが設定されているプロンプト)。

使用しているsshのバージョンはわかりませんが、cygwinを使用している場合は、CygwinのSSHエージェントから次のレシピを使用できます

# Add to your Bash config file
SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
    eval `$SSHAGENT $SSHAGENTARGS`
    trap "kill $SSH_AGENT_PID" 0
fi

これにより、開く新しいコマンドプロンプトウィンドウごとにエージェントが自動的に起動します(1つのセッションで複数のコマンドプロンプトを開く場合は最適ではありませんが、少なくとも機能するはずです)。


1
参考

9
私は別のSOの質問からここにリンクされました。これをBash構成ファイルに追加する必要がある理由を尋ねることはできますか?私のマシンで実行する必要があるのは実行するだけeval $(ssh-agent)で、新しいターミナルウィンドウごとにパスワードなしのsshを使用できます。
Andy J

そのターミナルから新しいターミナルを起動しない限り、それは不可能であるべきです。
Robin Green、

114

走る

ssh-agent bash
ssh-add

詳細を取得するには、検索できます

ssh-agent

または実行

man ssh-agent

7
Windowsでgit bashを使用している場合は、これを試してみることをお勧めします。
Neeraj Sewani

@ neer17これによりssh-copy-id、ubuntuで使用できるようになりました。を使用ssh-agentしてbashを起動しないとキーを追加できなかった理由がわかりません。
SomeGuyOnAComputer

2
これはWindows用です!(W10proビルド1809およびgit 2.21.0でテスト済み)
Alfabravo

私は私のためにZSHと、この作品を使用しています:ssh-agent zsh; ssh-add
sirboderafael

97

次の手順を試してください。

1)Git Bashを開いて実行します。 cd ~/.ssh

2)エージェントを実行してみます: eval $(ssh-agent)

3)現在、次のコマンドを実行できます。 ssh-add -l


9
これは私のために働いたここでの唯一の解決策です(Windows 7上で)。まず、私が使用ps aux | grep sshしてkillエージェントを殺すためにリックの答えでコマンドを。その後ssh-add、-lスイッチなしで動作しました(-lを使用するとエラーが発生しました)。eval 'ssh-agent'リックの答えがうまくいかなかったので、私はeval $(ssh-agent)ここでチェチョロの答えのように使用しなければなりませんでした。
Frug

6
+1 OP(Windows 7)とまったく同じ問題があり、これが私に有効な唯一の解決策です。
Weblurk 2014年

1
参考

2
@Frugアポストロフィではなく、バッククォートです。内部に含まれているものを実行することを意味するシェルスクリプトで。$(ssh-agent)と同等ですが`ssh-agent`、より読みやすくなっています。
MM

96

$ ssh-agent -sを使用$ eval `ssh-agent -s`する代わりに、私はこの問題を解決するために使用しました。

これが私が段階的に実行したものです(GitBashでステップ2以降):

  1. で私の.sshフォルダをクリーンアップしました C:\user\<username>\.ssh\
  2. 新しいSSHキーを生成しました
    $ ssh-keygen -t rsa -b 4096 -C "xyz@abc.com"
  3. プロセスID(SSHエージェント)がすでに実行されているかどうかを確認します。
    $ ps aux | grep ssh
  4. (オプション)手順3で見つかった場合、それらを強制終了します
    $ kill <pids>
  5. SSHエージェントを開始しました
    $ eval `ssh-agent -s`
  6. 手順2で生成されたsshキーをsshエージェントに追加
    $ ssh-add ~/.ssh/id_rsa

3
'eval'は、内部または外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されません。
Chutipong Roobklom、2018

eval ssh-agent -sでエージェントを再起動し、ssh-add〜/ .ssh / id_rsaを使用して古いキーを追加するだけです。新しいSSHキーを生成するなら、あなたはなどgithubの、ビットバケットなど、すべてのあなたのサービスでそのキーを更新する必要があります
MohitサティシュPawar

これをWindowsの再起動に耐えさせる方法はありますか?再起動後、「eval ssh-agent -s」と「ssh-add〜/ .ssh / id_rsa」を再度起動するまで機能しません。
Michal Vician

1
長い間探していたところ、これがうまくいった解決策です
Sujit.Warrier

素晴らしい説明!
avivamg

56

Windows 10では、ここに記載されているすべての回答を試しましたが、どれも機能しないようです。実際、彼らは手がかりを与えます。問題を解決するには、3つのコマンドが必要です。この問題の考え方は、ssh-addがSSH_AUTH_SOCKおよびSSH_AGENT_PID環境変数を現在のssh-agent sockファイルのパスとpid番号で設定する必要があるということです。

ssh-agent -s > temp.txt

これにより、ssh-agentの出力がファイルに保存されます。テキストファイルの内容は次のようになります。

SSH_AUTH_SOCK=/tmp/ssh-kjmxRb2764/agent.2764; export SSH_AUTH_SOCK;
SSH_AGENT_PID=3044; export SSH_AGENT_PID;
echo Agent pid 3044;

「/tmp/ssh-kjmxRb2764/agent.2764」のようなものをテキストファイルからコピーし、コンソールで次のコマンドを直接実行します。

set SSH_AUTH_SOCK=/tmp/ssh-kjmxRb2764/agent.2764

テキストファイルから「3044」のようなものをコピーし、次のコマンドをコンソールで直接実行します。

set SSH_AGENT_PID=3044

現在、環境変数(SSH_AUTH_SOCKおよびSSH_AGENT_PID)が現在のコンソールセッションに設定されている場合、ssh-addコマンドを実行すると、sshエージェントの接続に再び失敗することはありません。


2
ありがとうございました!これはまさに私が必要としたものでした。
等時性2015

6
いいえ、まだ同じです。
Jaskey

3
これらの手順は、「eval $(ssh-agent)」を実行するのと同じです
K.Nicholas

2
私のWindows 10で修正されました!ありがとうございました!
ntl 2016年

1
これは実際にちょうど交換するために必要な... Linux上の問題を節約するために私を助けたsetことでexport
グレッグHOR

30

私が遭遇したことの1つは、evalCygwinを使用してもうまくいかなかったことでしたssh-agent ssh-add id_rsa

その後、私は秘密鍵がオープンすぎるという問題に遭遇しました。そのために私が何とか見つけた解決策(ここから):

chgrp Users id_rsa

と同様

chmod 600 id_rsa

最後に私は使うことができました:

ssh-agent ssh-add id_rsa

あなたは使いましたeval `ssh-agent`バッククォートで、`周りssh-agentに示したように、私の答えは?Cygwinでは、これでうまくいきました。あなたはssh-agent ssh-add、少なくともmsysgit Bashでもうまくいくようです。ただし、これid_rsaは使用されるデフォルトのキーであるため、で指定する必要はありませんssh-agent ssh-add id_rsa

私はバック
ティックを

1
ほんの数時間の挫折を解決しました。ありがとう!
Chee Loong Soon

この答えはbashでうまくいきました。
Lsakurifaisu

27

Windows 7のn3oの答えを増幅するには...

私の問題は、いくつかの必要な環境変数が設定されていないことでした。n3oは、ssh-agentがそれらの環境変数を設定する方法を教えてくれるが、実際には設定していません。

Windowsでは「評価」を行うことができないので、代わりに次のようにします。

ssh-agentの出力をバッチファイルにリダイレクトします。

ssh-agent > temp.bat

次に、メモ帳などのテキストエディタを使用してtemp.batを編集します。最初の2行のそれぞれについて:-行の先頭に「set」という単語とスペースを挿入します。-最初のセミコロンとそれに続くすべてを削除します。

3行目を削除します。temp.batは次のようになります。

set SSH_AUTH_SOCK=/tmp/ssh-EorQv10636/agent.10636
set SSH_AGENT_PID=8608

temp.batを実行します。これにより、ssh-addが機能するために必要な環境変数が設定されます。


参考

Could not open a connection to your authentication agent.Win10 PowerShellでssh-addを実行すると、まだエラーが発生します。
ケブマン

19

私はこれを機能させました。~/.ssh/configファイルを開きます。

以下を追加-

Host github.com
 IdentityFile ~/.ssh/github_rsa

ヒント「Git用のSSHの設定」のヒントを示したページでは、 スペースを1つだけインデントすることが重要であると記載されていました。


1
これは、SSHキーのパスフレーズの入力には役立ちません。
alesch 2014

1
パスフレーズを入力したくない場合は、パスフレーズなしでキーを作成します。とにかくパスフレーズをスクリプトに保存するだけの場合は、パスフレーズを使用しても意味がありません。
Paul Becotte 2014

これがssh-agentを使用する全体のポイントです。キーのパスワードは、ssh-agentによって処理される安全なキーチェーンに保存されます。
alesch 2014

これは私にとってここでの最良の答えです。Windows 7で何千回もssh-agentを起動することで多くの問題があり、そのキルトラップはうまくいきませんでした。自宅のパソコンにパスフレーズがなくてもかまいません。
Fleshgrinder 2015

18

これらの指示に従えば、問題は解決されます。

MacまたはLinuxマシンを使用している場合は、次のように入力します。

eval "$(ssh-agent -s)"

Windowsマシンを使用している場合は、次のように入力します。

ssh-agent -s

13

別の解決策を提示しましょう。Git 1.8.2.2またはその周辺をインストールしたばかりでSSHを有効にしたい場合は、よく書かれた指示に従ってください。

わずかな障害に遭遇する可能性のあるステップ5.6までのすべて。SSHエージェントがすでに実行されている場合、bashを再起動すると次のエラーメッセージが表示される可能性があります

Could not open a connection to your authentication agent

その場合は、次のコマンドを使用して、複数のssh-agentプロセスが実行されているかどうかを確認します

ps aux | grep ssh

複数のssh-agentサービスが表示される場合は、これらのプロセスをすべて強制終了する必要があります。次のようにkillコマンドを使用します(PIDはコンピューター上で一意になります)

kill <PID>

例:

kill 1074

すべてのssh-agentプロセスを削除したら、px aux | grep sshコマンドをもう一度実行して、これらがなくなっていることを確認してから、Bashを再起動します。

これで、次のようなものが得られるはずです。

Initializing new SSH agent...
succeeded
Enter passphrase for /c/Users/username/.ssh/id_rsa:

これで、ステップ5.7以降に進むことができます。



私の場合、リストされている項目の1つが検索を実行しているgrepプロセスですが、実行後に既に強制終了されていることを追加したかっただけです。しゃれは意図されていません。
Ryan Mortensen

参考

13

ウィンドウユーザーの場合、cmd eval `ssh-agent -s`が機能しないことがわかりましたが、git bashを使用するとうまくいきeval `ssh-agent -s`; ssh-add KEY_LOCATION、Windowsサービスの「OpenSSHキー管理」が無効になっていないことを確認しました


12

注:これは、この質問と統合されたこの質問に対する回答です。その質問はWindows 7に対するものでした。つまり、私の答えはCygwin / MSYS / MSYS2に対するものでした。これは一部のUNIXのようですが、SSHエージェントをこのように管理する必要があるとは思いません

これにより、SSHエージェントが実行され、Bashターミナルを開くたびはなく、必要なときにのみ認証されます。ssh自体やscpなど、一般的にSSHを使用するすべてのプログラムに使用できます。これを追加するだけ/etc/profile.d/ssh-helper.shです:

ssh-auth() {
    # Start the SSH agent only if not running
    [[ -z $(ps | grep ssh-agent) ]] && echo $(ssh-agent) > /tmp/ssh-agent-data.sh

    # Identify the running SSH agent
    [[ -z $SSH_AGENT_PID ]] && source /tmp/ssh-agent-data.sh > /dev/null

    # Authenticate (change key path or make a symlink if needed)
    [[ -z $(ssh-add -l | grep "/home/$(whoami)/.ssh/id_rsa") ]] && ssh-add
}

# You can repeat this for other commands using SSH
git() { ssh-auth; command git "$@"; }

1
参考

2
ssh-agentプロセスは、実行に使用されたのと同じ端末に関連付けられていないようです。私が推測するps -A | grep ssh-agentか、ps h -C ssh-agent代わりに使用する必要がありますps | grep ssh-agent
アレクシス

1
関数名にハイフンを使用することはお勧めできません。私はなぜ知っているが、読んでいない本を。たとえば、echo ssh-auth | bash失敗することがわかりました。
アレクシス2015年

1
これをもう少し単純化することができます。実行されているかどうかを確認し、env変数を割り当てます。次に、ssh構成エントリに追加AddKeysToAgent yes(またはを使用prompt)します(Host *すべてのホストに使用します)。そうすると、実際に接続しようとした場合にのみ、SSHパスワードの入力を求められます。そうしないと、単純なgit diffまたはのパスワードの入力を求められる場合がありますgit status
ST-DDT

2
$HOME/.sshよりも堅牢かもしれない/home/$(whoami)/.ssh
アリSweedler

12

私は同じ問題を抱えていてUbuntu、他の解決策は私を助けませんでした。ようやく自分の問題が何であるかがわかりました。私はフォルダにsshキーを作成したので、ルートとして/root/.ssh実行しssh-addても、その作業を実行できず、言い続けることができませんでした。

Could not open a connection to your authentication agent.

私は自分のssh公開鍵と秘密鍵を/home/myUsername/フォルダー に作成し、

ssh-agent /bin/sh

それから私は走った

ssh-add /home/myUsername/.ssh/id_rsa

そして問題はこのように解決されました。

注:でリポジトリにアクセスするにgitは、でsshキーを作成するときにgitパスワードを追加しますssh-keygen -t rsa -C "your git email here"


9

サーバーに接続するときにパラメーター-Aを使用します。例:

ssh -A root@myhost

マニュアルページから:

-A Enables forwarding of the authentication agent connection.  
   This can also be specified on a per-host basis in a configuration file.

   Agent forwarding should be enabled with caution.  Users with the ability to bypass file permissions on the remote host (for the agent's
   UNIX-domain socket) can access the local agent through the forwarded 
   connection.  An attacker cannot obtain key material from the agent,
   however they can perform operations on the keys that enable them to
   authenticate using the identities loaded into the agent.

それは何をするのか、そしてその理由は?
erikbwork

manページのとおり... man ssh ... -A認証エージェント接続の転送を有効にします。これは、構成ファイルでホストごとに指定することもできます。
Scott Stensland 2017

8

実行するための基本的なソリューションssh-agentは、多くの答えで答えられています。ただし、ssh-agent(開いた各ターミナルまたはリモートログインごとに)何度もssh-agent実行すると、メモリ内で多数のコピーが実行されます。この問題を回避するために提案されているスクリプトは長く、分離されたファイルを書き込んだりコピーしたりする必要がある~/.profileか、またはに非常に多くの文字列を書き込む必要があります~/.schrc簡単な2つの文字列ソリューションを提案します。

以下のためのshbashの、など:

# ~/.profile
if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -s > ~/.ssh-agent.sh; fi
. ~/.ssh-agent.sh

CSHtcshの、など:

# ~/.schrc
sh -c 'if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -c > ~/.ssh-agent.tcsh; fi'
eval `cat ~/.ssh-agent.tcsh`

ここにあるもの:

  • ssh-agent名前と現在のユーザーでプロセスを検索する
  • 現在のユーザープロセスが見つからない場合は、呼び出して適切なシェルスクリプトファイルを作成しssh-agent、実行しssh-agentます。ssh-agent
  • 適切な環境を構成する作成されたシェルスクリプトを評価する

作成されたシェルスクリプト~/.ssh-agent.tcsh~/.ssh-agent.sh他のユーザーのアクセスから保護する必要はありません。なぜなら、最初の通信ssh-agentは他のユーザーがアクセスできない保護されたソケットを通じて処理され、次に別のユーザーがディレクトリssh-agent内のファイルを列挙することで単純なソケットを見つけることができるから/tmp/です。ssh-agentプロセスへのアクセスに関する限り、それは同じことです。


6

以下を試してください:

ssh-agent sh -c 'ssh-add && git push heroku master'

1
これを行うクリーンな方法のように見えます。
Leon Grapenthin

6

説明については、@ cupcakeの回答を読んでください。ここでは、修正の自動化のみを試みます。

BASHでCygwin端末を使用している場合は、$ HOME / .bashrcファイルに以下を追加します。これは、最初のBashターミナルでssh-agentを1回だけ起動し、ssh-agentにキーを追加します。(これがLinuxで必要かどうかはわかりません)

###########################
# start ssh-agent for
# ssh authentication with github.com
###########################
SSH_AUTH_SOCK_FILE=/tmp/SSH_AUTH_SOCK.sh
if [ ! -e $SSH_AUTH_SOCK_FILE ]; then
    # need to find SSH_AUTH_SOCK again.
    # restarting is an easy option
    pkill ssh-agent
fi
# check if already running
SSH_AGENT_PID=`pgrep ssh-agent`
if [ "x$SSH_AGENT_PID" == "x" ]; then
#   echo "not running. starting"
    eval $(ssh-agent -s) > /dev/null
    rm -f $SSH_AUTH_SOCK_FILE
    echo "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK" > $SSH_AUTH_SOCK_FILE
    ssh-add $HOME/.ssh/github.com_id_rsa 2>&1 > /dev/null
#else
#   echo "already running"
fi
source $SSH_AUTH_SOCK_FILE

「ssh-add」コマンドで正しいキーを追加するために忘れないでください。


5

ssh-agentを起動したとき、すでに実行されていたときに、この問題が発生しました。混乱する。これが当てはまるかどうかを確認するには、

eval $(ssh-agent)

これがあなたがそうあるべきだと思っていたものと同じであるかどうかを確認します。私の場合、それは私が始めたばかりのものとは異なりました。

複数のssh-agentが実行されているかどうかをさらに確認するには、以下を確認できます。

ps -ef | grep ssh

2
eval $(ssh-agent)は間違っているかもしれませんが、実行すると毎回異なるPIDで新しいエージェントが作成されるはずです。

4

これをWindowsでsshを介してstashに接続するように動作させようとしたときに、同様の問題が発生しました

ここに私のために働いた解決策があります。

  1. 私は自分のWindowsボックスでPageant sshエージェントを実行していたことがわかりました-実行しているものを確認します。PuttyとwinScpのデフォルトとしてはPageantだと思います

  2. ssh-addは、このタイプのエージェントのコマンドラインからは機能しません

  3. タスクバーのページェントアイコンをダブルクリックすると表示されるページェントUIウィンドウを介して秘密鍵を追加する必要があります(起動したら)。

  4. Pageantにキーを追加する前に、PPK形式に変換する必要があります。詳細な手順は、こちらから入手できます。SSHキーをppk形式に変換する方法

  5. それだ。キーをstashにアップロードしたら、SourceTreeを使用してローカルリポジトリを作成し、リモートのクローンを作成できました。

お役に立てれば...


3

エラーを解決するには、強制終了(強制終了)したgitプロセス(sshエージェント)を使用し、Gitをアンインストールしてから、再度Gitをインストールします。


2
Gitを再インストールする代わりに、既存のエージェントプロセスを強制終了してから再起動するだけでよいのではないかと思います。

3

Win8.1EでGit Bashを使用した場合、私の解決策は次のとおりです。

eval $(ssh-agent) > /dev/null
ssh-add ~/.ssh/id_rsa

に出力する必要があるのはなぜ/dev/nullですか?あなたの答えは基本的にこれとまったく同じことをます。

また、これ~/.ssh/id_rsaがデフォルトのキーであることを指摘したいのでssh-add ~/.ssh/id_rsa、を指定する必要はなく、動作するssh-addはずです。

私はこの同じ環境@Cupcakeであなたの解決策を試しました、それは動作しません。これが答えである理由もわかりませんが、私がこのようにしない限り、うまくいきませんでした。
nighliber 2015

3

Puttyを使用している場合は、「接続/ SSH /認証/エージェント転送を許可する」オプションを「true」に設定する必要があるかもしれません。

ここに画像の説明を入力してください


3

これでうまくいきました。

CMDウィンドウで、次のコマンドを入力します。

cd path-to-Git/bin # (for example,cd C:\Program Files\Git\bin)
bash
exec ssh-agent bash
ssh-add path/to/.ssh/id_rsa

3

Windows 10に組み込まれているbashの場合、これを.bash_profileに追加しました。

if [ -z $SSH_AUTH_SOCK ]; then
    if [ -r ~/.ssh/env ]; then
            source ~/.ssh/env
            if [ `ps -p $SSH_AGENT_PID | wc -l` = 1 ]; then
                    rm ~/.ssh/env
                    unset SSH_AUTH_SOCK
            fi
    fi
fi

if [ -z $SSH_AUTH_SOCK ]; then
    ssh-agent -s | sed 's/^echo/#echo/'> ~/.ssh/env
    chmod 600 ~/.ssh/env
    source ~/.ssh/env > /dev/null 2>&1
fi

1
$(ssh-agent -s)エージェントの環境を設定するために呼び出すように言っただけなのに、なぜ多くのテキストを貼り付けるのかわかりません。
erikbwork

1
これは、初めて使用したときにうまくいきました。しかし、システムの再起動後、実際には問題がさらに悪化しました。sshがまったく機能なくなった。推奨されません。
yspreen 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.