私はこのエラーに遭遇しています:
$ 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.
ssh-agent
を始めましたか?ssh-agent
コマンドを実行する前に、ssh-add
を起動する必要があります。
eval `ssh-agent -s`
ssh-add
これにより、Windows上の msysgit Bash のエージェントが起動されます。別のシェルまたはオペレーティングシステムを使用している場合は、 その他の回答 にリストされているものなど、コマンドの変形を使用する必要があります。
次の答えを見てください。
Ssh-agentを自動的に起動し、単一のインスタンスが複数のコンソールウィンドウで動作できるようにするには、 ログイン時にssh-agentを起動する を参照してください。
ssh-agent
だけでなくeval
を使う必要があるのはなぜでしょうか。その理由については、 Robin Greenの答え を参照してください。
また、私がssh-add
を使うときはいつでも、私はいつもそれに秘密鍵を追加します。ファイル~/.ssh/id_rsa.pub
は公開鍵のように見えますが、それがうまくいくかどうかはわかりません。 ~/.ssh/id_rsa
ファイルはありますか?あなたがそれをテキストエディタで開くならば、それはそれが秘密鍵であると言いますか?
私は無駄に他の解決策を試してみました。私はさらに研究を重ねたところ、次のコマンドがうまくいくことがわかりました。私はWindows 7と Git Bash を使っています。
eval $(ssh-agent)
でより多くの情報: https://coderwall.com/p/rdi_wq
次のコマンドは私のために働きました。私はCentOSを使っています。
exec ssh-agent bash
MsysgitまたはCygwinを使用している場合は、 SSH-Agent(msysgitおよびcygwinおよびbash )に優れたチュートリアルがあります。
ホームフォルダに.bashrc
という名前のファイルを追加します。
ファイルを開いて貼り付けます。
#!/bin/bash
eval `ssh-agent -s`
ssh-add
これはあなたのキーが従来の~/.ssh/id_rsa
の場所にあると仮定します。そうでない場合は、ssh-add
コマンドの後に絶対パスを含めます。
内容をファイル~/.ssh/config
に追加または作成します。
ForwardAgent yes
最初のチュートリアルではForwardAgent
パラメータはYes
ですが、それはタイプミスです。すべて小文字で使用するとエラーが発生します。
Msysgitを再起動します。それはあなたに一度あなたのパスフレーズを入力するように頼むでしょう、そしてそれはそれです(あなたがセッションを終了するか、あなたのssh-agentが殺されるまで)。
端末を開くたびに新しいssh-agentを起動したくない場合は、 Keychain を調べてください。私は今Macを使っているので、それを設定するためにチュートリアル Mac OS Xではzshとキーチェーン付きのssh-agent を使いましたが、Googleの検索でも十分に使えるでしょうWindows用の情報の。
更新 :Macの場合のより良い解決策は、Mac OSのキーチェーンにあなたの鍵を追加することです。
ssh-add -K ~/.ssh/id_rsa
そのような単純な。
このエラーを解決するには
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
元の修正ソース:
私はLinuxについても同じ問題に直面しました、そして私がしたことがここにあります:
基本的に、コマンドssh-agentはエージェントを起動しますが、実行するための環境変数を実際には設定しません。それらの変数をシェルに出力するだけです。
必要がある:
eval `ssh-agent`
そしてssh-addを実行してください。を参照してください。認証エージェントへの接続を開けませんでした。
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)Git Bashを開いて実行します。cd ~/.ssh
2)エージェントを実行してみます。eval $(ssh-agent)
3)今、以下のコマンドを実行することができます。ssh-add -l
$ ssh-agent -s
を使う代わりに、私はこの問題を解決するために$ eval `ssh-agent -s`
を使った。
これは私が段階的に実行したものです(GitBashのステップ2以降):
C:\user\<username>\.ssh\
に片付けました$ ssh-keygen -t rsa -b 4096 -C "[email protected]"
$ ps aux | grep ssh
$ kill <pids>
$ eval `ssh-agent -s`
$ ssh-add ~/.ssh/id_rsa
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エージェントへの接続に失敗することはありません。
私が遭遇した1つのことは、Cygwinを使用してeval
が私のために機能しなかったことでした。私のために機能したのはssh-agent ssh-add id_rsa
でした。
その後、私の秘密鍵があまりにもオープンであるという問題に遭遇しました。私はそれを見つけることができました( here から):
chgrp Users id_rsa
と同様
chmod 600 id_rsa
ついに私は使うことができました:
ssh-agent ssh-add id_rsa
Windows 7のためのn3oの答えを増幅するために...
私の問題は、実際には必要な環境変数が設定されていないことです。nshは、ssh-agentがそれらの環境変数を設定する方法を教えてくれることは正しいのですが、実際には設定しません。
Windowsはあなたに "eval"をさせていないので、これを代わりにやるべきです:
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が動作するのに必要な環境変数を設定します。
実行する
ssh-agent bash
ssh-add
より多くの詳細を取得するにはあなたが検索することができます
ssh-agent
または走る
man ssh-agent
私はこれがうまくいった。 ~/.ssh/config
ファイルを開きます。
以下を添付してください -
Host github.com
IdentityFile ~/.ssh/github_rsa
GitのためのSSHの設定 というヒントをくれたページでは、ここにHerokuの設定があり、そのスペースがなく、正しく機能することを確認しました。
あなたがこれらの指示に従えば、あなたの問題は解決されるでしょう。
MacまたはLinuxの場合は、次のように入力します。
eval "$(ssh-agent -s)"
Windowsマシンを使用している場合は、次のように入力します。
ssh-agent -s
注:これは この質問に対する答えです 、これはこれとマージされました。その質問は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 "$@"; }
別の解決策を提案しましょう。 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以降に進むことができます。
サーバーに接続するときは、パラメーター-Aを使用します。例えば、
ssh -A root@myhost
manページから:
-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.
ssh-agent
を実行するための基本的な解決策は、多くの回答で回答されています。ただし、ssh-agent
を何度も(開いた各ターミナルまたはリモートログインごとに)実行すると、メモリ内で実行されるssh-agent
のコピーが多数作成されます。この問題を回避するために推奨されるスクリプトは長く、分離されたファイルを記述および/またはコピーする必要があるか、~/.profile
または~/.schrc
に多くの文字列を書き込む必要があります。 単純な2文字列ソリューション:を提案させてください
sh、bashなどの場合:
# ~/.profile
if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -s > ~/.ssh-agent.sh; fi
. ~/.ssh-agent.sh
csh、tcshなどの場合:
# ~/.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
プロセスへのアクセスに関しては、同じことです。
以下を試してください。
ssh-agent sh -c 'ssh-add && git Push heroku master'
説明を読むには @ cupcake's answer を読んでください。ここで私はただ修正を自動化することを試みます。
Cygwin端末をBASHと併用している場合は、$ HOME/.bashrcファイルに以下を追加してください。これは最初のBash端末で一度だけssh-agentを起動し、キーを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」コマンドで正しいキーを追加することを忘れないでください。
Ssh-agentを起動したとき、すでに実行されていたときに、この問題が発生しました。混乱します。そうであるかどうかを確認するには、
eval $(ssh-agent)
これがあなたがそれがあるべきであると思ったものと同じであるかどうか見るために。私の場合は、始めたばかりのものとは異なりました。
複数のssh-agentが実行されているかどうかをさらに確認するために、次のことを確認できます。
ps -ef | grep ssh
私はUbuntu
でも同じ問題を抱えていましたが、他の解決策は私を助けてくれませんでした。私はようやく自分の問題が何であるかに気づいた。 ssh
キーを/root/.ssh
フォルダーに作成したので、ssh-add
をrootとして実行した場合でも、その作業を実行できず、言い続けることができませんでした
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-keygen -t rsa -C "your git email here"
を使用してssh
キーを作成するときにgitパスワードを追加してください。
私はssh経由で隠し場所に接続するためにこれをWindows上で動作させようとしていたときに私は同様の問題を抱えていました
これは私のために働いた解決策です。
私は自分のWindowsマシンでPageant sshエージェントを実行していました - あなたが何を実行しているのかチェックします。それはPuTTYとwinScpでデフォルトとして来るので、私はそれがPageantであると思う
Ssh-addはこのタイプのエージェントではコマンドラインから機能しません。
あなたは(それが開始されたら)あなたがタスクバーのPageantアイコンをダブルクリックすることによって得ることができるpageant UIウィンドウを介して秘密鍵を追加する必要があります。
Pageantにキーを追加する前に、それをPPK形式に変換する必要があります。詳しい説明はこちら SSHキーをppk形式に変換する方法
それだ。キーをstashにアップロードすると、SourceTreeを使用してローカルリポジトリを作成し、リモートを複製することができました。
お役に立てれば...
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
これ 働いた 私のために/。
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
私はgitプロセス(sshエージェント)を強制的に停止(強制終了)してからGitをアンインストールしてからGitを再度インストールすることでエラーを解決しました。
PuTTYを使用している場合は、おそらく "Connection/SSH/Auth/Allow agent forwarding"オプションを "true"に設定する必要があります。
Win8.1EでGit Bashを使用したときの私の解決策は次のとおりです。
eval $(ssh-agent) > /dev/null
ssh-add ~/.ssh/id_rsa
私はPoSHとStart-SshAgent
/Add-SshKey
コマンドで問題を抱えていたので、私は何人かの人々を助けるかもしれない簡単なスクリプトを作りました。これは、notepad $PROFILE
を実行して編集できるPowerShellプロファイルに追加することを目的としています。
if ($(Get-Process ssh-agent) -eq $null)
{
$ExecutionContext.InvokeCommand.ExpandString($(ssh-agent -c).Replace("setenv", "set"));
}
ssh-agent
が実行中かどうかを検出し、まだ実行中のエージェントがない場合にのみ実行します。 $ExecutionContext.InvokeCommand.ExpandString
は非常に危険なコマンドであるため、ssh-agent
の信頼できないコピーを使用している場合は、このソリューションを使用したくない場合があります。
リモートURLも確認してください。 https:// proptocolの代わりにgit @ github ...を使用してください。
https://stackoverflow.com/a/33928364/551811 を参照してください。
これが私がPowerShell
を使うときに思いついた解決策です。
以下の関数をあなたのMicrosoft.PowerShell_profile.ps1
に追加してください
function RunSsh($userIdentity ) {
$agent=ssh-agent
$position=$agent[0].IndexOf("=")
$ending=$agent[0].IndexOf(";")
$variableStartPosition=$agent[0].IndexOf("export")
$variableEndPosition=$agent[0].LastIndexOf(";")
$variableName=$agent[0].Substring($variableStartPosition+7,$variableEndPosition-$variableStartPosition-7)
[Environment]::SetEnvironmentVariable($variableName, $agent[0].Substring($position+1,$ending-$position-1))
$position=$agent[1].IndexOf("=")
$ending=$agent[1].IndexOf(";")
$variableStartPosition=$agent[1].IndexOf("export")
$variableEndPosition=$agent[1].LastIndexOf(";")
$variableName=$agent[1].Substring($variableStartPosition+7,$variableEndPosition-$variableStartPosition-7)
[Environment]::SetEnvironmentVariable($variableName, $agent[1].Substring($position+1,$ending-$position-1))
if($userIdentity.Length -eq 0) {
ssh-add
} else {
ssh-add $userIdentity
}
}
これで、コマンドラインから~\.ssh
フォルダー内のIDファイルを使用するRunSsh
を実行するか、RunSsh C:\ssh\id_rsa
を使用してIDファイルを渡すことができます。ここでC:\ssh\id_rsa
はユーザーのIDファイルです。
これが機能するためには、path
環境変数にssh-add
とssh-agent
が必要です。
ウィンドウユーザーには、cmd "eval ssh-agent -s
"は機能しませんでしたが、git bashを使用すると "eval ssh-agent -s
; ssh-add KEY_LOCATION"という扱いになり、Windowsサービス "OpenSSH Key Management"は無効になりませんでした
「あなたの認証エージェントへの接続を開くことができませんでした」というメッセージが出ました。 SSHキーを生成および追加しているときにコマンドを実行すると:ssh-add ~/.ssh/id_rsa
。私は自分のマシン上で動いている複数のssh-agent
インスタンスを停止し、そして私のwindowsマシン上のコントロールパネルからGitをアンインストールし、そして再びGitをインストールすることによってそれを解決し、そして物事は今働いていた。
私の場合、私の Comodoファイアウォール はsshエージェントをサンドボックス化していました。サンドボックス化を無効にすると、リポジトリのクローンを作成できました。
参考までに、私はWindows 7でComodoファイアウォールを使用しています。