我在〜/ .ssh目录中存储了一些生成的RSA密钥,用于访问各种服务器。我没有在这些键上设置密码短语。当前,为了登录到这些服务器,我在终端中使用以下命令:
eval `ssh-agent` ssh-add ~/.ssh/some_key_rsa ssh user@server
(我已经编写了一些Bash函数来简化此操作。)
使用钥匙串有更好的方法吗?
#1 楼
为了使其正常工作,应将$SSH_AUTH_SOCK
环境变量指向/tmp/launch-xxxxxx/Listeners
。您应该在登录时自动完成此操作。该套接字上的侦听器使用ssh-agent协议。 您的bash脚本正在启动您自己的ssh代理(拼写为
ssh-agent
,而不是ssh_agent),并覆盖在登录时为您设置的现有ssh-agent
。 此外,钥匙串的重点是将密码存储到您的ssh钥匙,但是您说您没有在这些钥匙上设置密码,所以我不确定您是什么
最后,当您首次登录时,可能不会看到ssh-agent进程。第一次尝试读取
/tmp
中的套接字时,启动服务将自动启动该过程。评论
谢谢。因此,我仍然必须运行ssh-add将RSA身份添加到登录时启动的默认ssh代理中?
–约翰·托普利
09年12月28日在18:01
您不必运行ssh-add;第一次运行ssh时,ssh-agent会要求输入密钥的密码。
–Rudedog
09年12月29日下午5:46
每次我运行ssh时都会提示我输入密码。关键是我不想输入任何密码。
–约翰·托普利
09年12月29日上午10:40
是什么提示您输入密码?我开始怀疑是提示您的是远程服务器,这使您的声明更清楚地说明了您的密钥没有密码短语。如果要绕过远程服务器上的密码,则需要将公共密钥添加到该服务器上的$ HOME / .ssh / authorized_keys中。 Mac OS的ssh-agent + keychain仅用于存储本地ssh密钥的密码。这并不意味着要通过现有的ssh连接发送远程密码。
–Rudedog
09年12月29日在16:08
使用ssh -v诊断ssh在做什么。还可以在服务器端使用sshd -p 8900 -v和ssh -v remote:8900来诊断sshd在做什么。
–Rudedog
09年12月30日在16:54
#2 楼
从OS X Leopard版本开始,ssh-agent与Keychain紧密集成。可以将所有SSH密钥的密码安全地存储在Keychain中,ssh-agent会在启动时从中读取密码。最重要的是,使用密码短语来保护您的密钥很简单,但是不必键入密码短语就可以使用它们!方法如下:将密码短语添加到每个ssh密钥到密钥链:(选项-k仅加载普通私钥,跳过证书)
ssh-add -K [path/to/private SSH key]
(请注意,这是一个大写的K)
每当您重新启动Mac时,钥匙串中的所有SSH密钥都会自动加载。您应该能够在“钥匙串访问”应用程序中以及通过以下方式从命令行查看密钥:
ssh-add -l
评论
developer.apple.com/library/mac/documentation/Darwin/Reference/…您还需要-K选项将密码短语存储在钥匙串中。
– Neeme Praks
15年4月24日在8:27
如果通过诸如Homebrew之类的软件包系统安装了另一个版本的SSH,则必须使用/ usr / bin / ssh-add之类的绝对路径。
–Ludovic Kuty
16年2月14日在8:04
有趣的是,在我的macOS Sierra中,重新启动后它不询问密码,但是ssh-add -l返回“该代理没有身份。” (ps aux包括/ usr / bin / ssh-agent -l)。
–HalilÖzgür
16年11月23日在9:54
对于macOS Sierra,情况已经改变。参见github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain
–schieferstapel
16-12-29在21:05
ssh-add -K ..还需要记住或添加到启动脚本中的另一件事:-)
–user260758
17年5月8日在8:27
#3 楼
从macOS Sierra开始,登录到帐户时,ssh-agent不再自动加载以前加载的ssh密钥。这在Apple方面是有意的,他们想与主流的OpenSSH实施保持一致。 [1]如此处所述,这是自macOS 10.12.2起的推荐方法:
添加以下行到您的
~/.ssh/config
文件:Host *
UseKeychain yes
AddKeysToAgent yes
使用
ssh-add /path/to/your/private/key/id_rsa
命令添加到ssh-agent的任何密钥都将自动添加到钥匙串中,并且应在重新启动后自动加载。 已弃用以下内容(仅供参考)。
要返回以前的行为,您需要运行
ssh-add -A
命令(该命令会自动-在登录时加载所有在密钥链上具有通行短语的ssh密钥。为此,请按照以下步骤操作:首先,添加所有要自动进行的密钥使用
ssh-add -K /absolute/path/to/your/private/key/id_rsa
命令将其加载到ssh-agent。 -K
参数可确保将密钥密码短语添加到macOS的密钥链中。确保使用密钥的绝对路径。使用相对路径将使自动启动的脚本找不到您的密钥。确保键入
ssh-add -A
时,所有密钥都显示为已添加。在其中创建一个名为
com.yourusername.ssh-add.plist
的文件~/Library/LaunchAgents/
及其以下内容。 launchd
会在登录时使用诸如此类的plist文件来运行脚本。[2] [3] <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.user.loginscript</string>
<key>ProgramArguments</key>
<array>
<string>ssh-add</string>
<string>-A</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
告诉
launchd
加载您刚刚使用的plist文件通过执行以下命令创建:launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist
。您应该已经全部设置好。
评论
相关:apple.stackexchange.com/questions/48502/…
–slm
17年5月15日在14:09
#4 楼
除了在运行10.12 Sierra的Mac的会话/重新启动之间保留密码外,还有比里卡多的答案更简单的方法。ssh-add -K ~/.ssh/id_rsa
注意:将路径更改为id_rsa密钥所在的位置。
ssh-add -A
创建(或编辑,如果存在)以下
~/.ssh/config
文件:Host *
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/id_rsa
现在,密码将在两次重启之间被记住!
Apple故意更改了macOS 10.12 Sierra中ssh-agent的行为,使其不再自动加载以前的SSH密钥,如本OpenRadar,Twitter讨论和Apple技术说明。上面的解决方案将模仿El Capitan的旧行为并记住您的密码。
评论
太棒了,工作就像一种魅力,恕我直言,比其他人更清洁,并在正确的地方解决了问题:)
– GerardJP
17年1月10日在15:08
相关:运行ssh-add -K将SSH密钥添加到Apple钥匙串后,Keychain Access.app中显示的条目名称和类型是什么?
–罗勒·布尔克
18/12/8在2:54
但是,如果您确实想自动加载密钥,则仍然需要LaunchAgents plist。
– David Moles
20年11月2日,17:52
#5 楼
注意:对于macOS Sierra,请参考ChrisJF的最新答案。[Jeff McCarrell的答案] [2]是正确的,除了添加密码的命令中包含一个破折号而不是连字符,即
–K
而不是-K
,从而导致出现一条消息,表明–K: No such file or directory
的效果。应显示为:
ssh-add -K [path/to/private SSH key]
评论
这应该是您所参考答案的注释,而不是新鲜的答案。我们在这里谈论安全性。有人建议您应该仔细输入,而不是盲目地复制和粘贴ssh-add -K
– Phil_1984_
16-09-20在21:22
使用带有K的连字符,我得到了非法选项-K。小写字母k被列为选项。
–山姆·达顿
16年11月10日在14:16
感谢您的反馈。我刚刚检查了macOS Sierra:-K(即破折号-K)仍然有效
–simonair
17年8月13日在15:41
如果您获得了非法选项-K,则可能使用的是与系统不同的ssh-add。尝试/ usr / bin / ssh-add -K...。请参阅help.github.com/en/github/authenticating-to-github/…
– monozok
19/12/23在8:45
#6 楼
我怀疑您没有使用默认的ssh
命令。您是否通过端口安装了ssh
?尝试使用which ssh
来查看您正在使用哪个ssh
命令。通常,它应该显示一个对话框,要求您输入密码(如果尚未存储在钥匙串中)。
评论
我没有使用端口。
–约翰·托普利
09年12月28日14:56
感谢您提供的信息:)我遇到了问题,因为我使用的是Homebrew的OpenSSH。
–ggustafsson
2012年10月6日13:47
#7 楼
尝试使用客户端ssh证书登录时,我遇到了类似的问题。在此特定情况下,它用于访问git存储库。就是这种情况:密钥已保存在
~/.ssh/
中私钥具有密码。
密码存储在OS X登录名中钥匙扣。
~/Library/Keychains/login.keychain
连接如下:我的Mac
->
远程mac ->
git / ssh服务器Mac OS X 10.8.5
当我使用远程桌面,我没有问题。但是,当通过SSH连接到远程mac时,每次都要求我提供ssh密码。以下步骤为我解决了这个问题。
security unlock-keychain
密码存储在登录钥匙串中。这会解锁它,并使ssh-agent能够访问它。eval `ssh-agent -s`
启动ssh-agent以供外壳使用。它将从钥匙串中获取密码,并用它来解锁ssh私钥。建立ssh / git连接并完成我的工作。
eval `ssh-agent -k`
杀死正在运行的ssh-agent。security lock-keychain
再次锁定钥匙扣。评论
为了使#2在别名中为我工作,我必须对每个Re:远程登录和钥匙串使用eval \ $(ssh-agent)。如果不在别名中,则eval $(ssh-agent)有效(不带反斜杠$)。
–特拉维斯
15年7月22日在4:59
#8 楼
另请参见:security import priv_key.p12 -k ~/Library/Keychains/login.keychain
security import pub_key.pem -k ~/Library/Keychains/login.keychain
...根据需要提供更多详细信息,请添加此注释:
“ security”命令能够导入密钥(以及其他内容) )直接插入钥匙串。令人高兴的是,与ssh-add不同,您可以指定钥匙串。这样就可以直接将其导入到系统钥匙串中(“ man security”以了解如何操作)
评论
您能给这个答案更多细节吗?谢谢。
–马修·威廉姆斯(Matthew Williams)
2014年3月26日上午10:14
#9 楼
此处描述了Apple最好的最佳解决方案(自macOS 10.12.2起)所以只需执行以下操作:
回显“ UseKeychain yes” >>〜/ .ssh / config
评论
如果多次输入命令,使用>>会有危险。如ChrisJF答案所述,最好做一个文件的手动版本。
–Cœur
17年1月30日在6:03
是的,你在那里
–本
17年2月2日在18:37
评论
我这样做是为了解决问题,请参考:unix.stackexchange.com/a/560404/388990希望它能起作用,谢谢答案冗长而令人困惑,需要进行编辑。 apple.stackexchange.com/questions/48502/…这里有一个简短而甜蜜的两步回答,这对脑筋急转弯的熊来说更好。