好的,所以这只是发生了 AGAIN ! MAN真令人沮丧!!!但是这次我挖了一点,发现由于某种原因,我的私钥被卸下了。
具体来说,当我称之为......
ssh-add -l -E md5
我明白了......
The agent has no identities.
但是,如果我再运行这个......
ssh-add /Users/[username]/.ssh/[private key]
一切都有效! SourceTree就像它应该的那样连接。
问题是 为什么我必须继续运行'ssh-add'命令?!为什么它会忘记我的钥匙?!
正如其他地方所提到的,不确定这是否有所作为,但我正在使用High Sierra运行MacBook Pro,尽管这也发生在Sierra上。
这个让我既难倒,又生气了! SourceTree(或ssh或其他东西!)每天都在忘记/不应用/忽略我的SSH密钥!我不知道为什么。
注意:已更新为使用BitBucket的信息而不是GitHub。
以下是我当前config
文件的相关部分
# --- Sourcetree Generated ---
Host MarqueIV-Bitbucket
HostName bitbucket.org
User MarqueIV
PreferredAuthentications publickey
IdentityFile /Users/MarqueIV/.ssh/MarqueIV-Bitbucket
UseKeychain yes
AddKeysToAgent yes
# ----------------------------
这是我的〜/ .ssh文件夹的“ls”(截断)
-rw-r--r--@ 1 MarqueIV staff 421 Dec 14 11:25 config
-rw-r--r--@ 1 MarqueIV staff 1808 Dec 9 14:20 known_hosts
-rw------- 1 MarqueIV staff 3243 Dec 6 23:33 MarqueIV-Bitbucket
-rw-r--r-- 1 MarqueIV staff 781 Dec 6 23:33 MarqueIV-Bitbucket.pub
这是我的known_hosts
文件(密钥已编辑)
bitbucket.org,104.192.143.3 ssh-rsa [redacted]
bitbucket.com,104.192.143.9 ssh-rsa [redacted]
104.192.143.2 ssh-rsa [redacted]
注意:不确定这是否重要,但您可以看到第1行和第2行似乎是重复的。
这是ssh -Tv git@bitbucket.org
OpenSSH_7.6p1, LibreSSL 2.6.2
debug1: Reading configuration data /Users/MarqueIV/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 48: Applying options for *
debug1: Connecting to bitbucket.org port 22.
debug1: Connection established.
debug1: key_load_public: No such file or directory
debug1: identity file /Users/MarqueIV/.ssh/id_rsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/MarqueIV/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/MarqueIV/.ssh/id_dsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/MarqueIV/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/MarqueIV/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/MarqueIV/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/MarqueIV/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/MarqueIV/.ssh/id_ed25519-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_7.6
debug1: Remote protocol version 2.0, remote software version conker_1.0.315-a08d059 app-153
debug1: no match: conker_1.0.315-a08d059 app-153
debug1: Authenticating to bitbucket.org:22 as 'git'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: curve25519-sha256@libssh.org
debug1: kex: host key algorithm: ssh-rsa
debug1: kex: server->client cipher: aes128-ctr MAC: hmac-sha2-256-etm@openssh.com compression: none
debug1: kex: client->server cipher: aes128-ctr MAC: hmac-sha2-256-etm@openssh.com compression: none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ssh-rsa SHA256:zzXQOXSRBEiUtuE8AikJYKwbHaxvSc0ojez9YXaGp1A
debug1: Host 'bitbucket.org' is known and matches the RSA host key.
debug1: Found key in /Users/MarqueIV/.ssh/known_hosts:1
debug1: rekey after 4294967296 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: rekey after 4294967296 blocks
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering public key: RSA SHA256:h+6zCXg32Uw4fYxSUMwYst3zee8RFb9Z47H1QUTz58E /Users/MarqueIV/.ssh/MarqueIV-GitHub
debug1: Authentications that can continue: publickey
debug1: Trying private key: /Users/MarqueIV/.ssh/id_rsa
debug1: Trying private key: /Users/MarqueIV/.ssh/id_dsa
debug1: Trying private key: /Users/MarqueIV/.ssh/id_ecdsa
debug1: Trying private key: /Users/MarqueIV/.ssh/id_ed25519
debug1: No more authentication methods to try.
git@bitbucket.org: Permission denied (publickey).
了解它似乎没有应用config
和known_hosts
中定义的密钥?这似乎是一个问题,不是吗?
注意:我正在使用macOS Sierra,我已更新了我的路径,在
/usr/bin
之前添加了/usr/local/bin
,如here所述。如果我不这样做,我会收到一条错误,指出ssh无法识别配置中的UseKeychain yes
。
因此,几乎每天这里都是我必须经历的例行程序。我将以GitHub为例。
我打开SourceTree并尝试从GitHub中获取最新信息。它失败了'git@github.com:权限被拒绝(公钥)。消息。
我从SourceTree中删除了我的GitHub帐户。
我从我机器上的.ssh文件夹中删除了GitHub的公钥和私钥。
我转到GitHub并从我的帐户中删除旧的公钥。
回到SourceTree,我使用我的用户名和密码再次登录GitHub。
使用SourceTree登录后,我为GitHub生成了一个新的SSH密钥对。
我将我的公钥复制到我的GitHub帐户中的SSH区域。 (有时我注意到它会为我添加它,但我喜欢安全并仔细检查。)
现在我可以再次推拉。
我回家过一天,然后在家里登录。它又失败了。重复上述所有步骤。
如何获取SourceTree / ssh /无论如何记住我的da * n键,这样每次更改位置时我都不必继续这样做?!我错过了什么步骤???
那么有人可以就如何使我的SSH密钥“坚持”提出建议吗?
答案 0 :(得分:4)
好的,我想我找到了所有部件。
为了帮助人们获得他们所追求的目标,请事先找到解决方案:
config
文件中配置了您要自动加载的密钥,并设置UseKeychain
和AddKeysToAgent
ssh-add -A
以自动重新加载钥匙串存储的密钥好了,现在你知道该怎么做了,这就是为什么'。
正如我的问题所解释的,最近,每当我重新启动时,我(错误地)认为系统丢失了我的私钥。它并没有失去它们,只是忽略了它们。这是因为一些事情在一个完美的混乱风暴中聚集在一起,对于像我这样从未使用GIT终端的人来说。
ssh-add -K [privateKey]
不再将密钥存储在钥匙串中(它实际上忽略了-K
。)虽然它们确实被添加到该会话的ssh中 - 因此您的连接将再次起作用 - 一旦重新启动,它们将不再起作用。 (这就是让我发疯的原因!)ssh-add -A
以重新加载它们。ssh-add -K [privateKey]
不再将密钥添加到钥匙串,因此无论如何ssh-add -A
对于以这种方式添加的密钥毫无意义。 (他们可以通过另一种方式添加到Keychain。一分钟内就可以了。更多信息。)由于上述原因,在升级操作系统之前手动添加-K
选项的任何键仍将存在于您的钥匙串中。但是,Apple更改后添加的密钥不是。
也就是说,Apple 仍然能够在钥匙串中存储密钥,但不能再从ssh-add
存储密钥。它现在仅适用于config
文件中定义的主机。
现在这是将钥匙串放入钥匙串的唯一方法。
再次,这是我的配置:
Host MarqueIV-Bitbucket
HostName bitbucket.org
User git <-- Make sure this is 'git', not what SourceTree puts here
PreferredAuthentications publickey
IdentityFile /Users/MarqueIV/.ssh/MarqueIV-Bitbucket
UseKeychain yes <-- Note here
AddKeysToAgent yes <-- ...and here
但是等等!如果您查看我的配置文件, 会设置这些值!那么为什么它不起作用呢?
两件事。
在我的情况下,通过SourceTree添加密钥会为初始会话添加密钥,但是一旦重新启动,密钥将再次加载,因此所有连接都将失败。 ssh-add -A
无法修复它,因为它们不在钥匙串中,这意味着我又回到手动添加ssh-add [privateKey]
命令行中的每一个。多么痛苦!!
然后它发生在我身上......如果该设置在配置文件中,并且该条目可以在命令行中使用,那么我不应该能够直接连接到该主机,从而添加了我钥匙串的钥匙?让我们来看看吧!我打字了......
ssh -T MarqueIV-BitBucket
果然,不仅是键添加到ssh中,而且它还被添加到我的钥匙串中!我通过直接检查Keychain Access确认了这一点,它就在那里。
为了进一步测试,我跑了这个......
ssh-add -D
删除了我的所有密钥。果然,我的SourceTree连接都再次失败。
然后我跑了这个......
ssh-add -A
并且钥匙串存储的键神奇地回来了,连接又开始工作了! WOOT!
好的,几乎就在那里,但并不完全!重启怎么样?同样,Apple不再自动从Keychain加载密钥。当然,它现在只是一个快速的短途旅行到终端键入ssh-add -A
,但同样,我不应该这样做!
输入LaunchAgents!
LaunchAgents和LaunchDaemons超出了对这篇文章的讨论,但简而言之,它们允许您在重启,按计划,系统发生变化等时执行某些操作。
在我的情况下,我想要在登录我的Mac时运行的东西,所以LaunchAgent是最好的选择。
这是我的plist定义每次登录帐户时如何执行ssh-add -A
(即使我从未触及过终端):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>ssh-add-a</string>
<key>ProgramArguments</key>
<array>
<string>ssh-add</string>
<string>-A</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
由于我只想为我的特定用户提供此功能,因此我将其存储在此处:
~/Library/LaunchAgents
注意:请务必更改权限以允许其执行,否则它将无法启动!
果然,在重新启动时,我的所有按键都恢复正常!连接都奏效了,孩子们玩了,成年男人哭了,这是Code-dom中的美好一天!
所以回顾一下:
希望这有帮助!现在是时候去为我酸痛的肩膀做一些冰爽的热情了,我一直在拍拍自己这么难以搞清楚这一切! ;)
答案 1 :(得分:0)
首先,安装latest Git for Windows release(2.15.1.2 one,只需将存档PortableGit-2.15.1.2-64-bit.7z.exe
解压缩到任意位置,然后adding it to your PATH)
其次,请确保您的SourceTree is using the System Git
第三,test in command-line if your ssh key is recognized:
ssh -T git@github.com
Hi username! You've successfully authenticated,
but GitHub does not provide shell access.
最后,确保 SourceTree / Tools / Option
将OpenSSH用作SSH客户端(不是putty)
然后SourceTree应该重新使用你的ssh密钥。
从您的日志中,~/.ssh/config
生成错误:它提到用户是您的用户名
无论何时建立与github.com/bitbucket.org的SSH连接,它都不会像你那样#34;。它始终为git
。
Host MarqueIV-Bitbucket
HostName bitbucket.org
User MarqueIV
PreferredAuthentications publickey
IdentityFile /Users/MarqueIV/.ssh/MarqueIV-Bitbucket
UseKeychain yes
AddKeysToAgent yes
使用ssh -Tv MarqueIV-Bitbucket
答案 2 :(得分:0)
〜/ .ssh / config摘录仅适用于主机MarqueIV-Bitbucket
。如果您的SSH远程列表被列为MarqueIV-Bitbucket:owner/repo
,那么SSH和SourceTree 应该尊重该配置;您可以使用ssh -Tv MarqueIV-Bitbucket
并将一个或多个遥控器更新为MarqueIV-Bitbucket:owner/repo.git
格式进行确认。