High Sierra远程SSH登录后SSH密钥密码短语失效问题求助
解决High Sierra远程SSH会话无法读取钥匙串SSH密钥密码短语的问题
这个问题我之前帮好几个开发者朋友解决过,本质原因其实是:High Sierra的钥匙串服务默认和用户的GUI桌面会话绑定,而SSH远程登录时进入的是非GUI环境,没有加载钥匙串访问的上下文,所以没法自动读取密钥的密码短语。下面给你几个实用的解决方案,按推荐程度排序:
方法1:SSH Agent Forwarding(推荐,安全又省心)
这个方法是让远程会话直接使用本地的ssh-agent,不用在远程端重复处理密钥,步骤如下:
- 先在本地终端确认ssh-agent正在运行:
如果输出类似echo $SSH_AUTH_SOCK/private/tmp/com.apple.launchd.xxxx/Listeners的路径,说明已经在运行;如果没输出,手动启动:eval "$(ssh-agent -s)" - 把你的SSH密钥添加到本地ssh-agent(并将密码短语存在钥匙串,应该已经做过,但确认下):
替换ssh-add -K ~/.ssh/id_rsaid_rsa为你实际的密钥文件名 - 编辑本地的
~/.ssh/config文件(没有的话新建一个),添加针对你的High Sierra主机的配置:Host my-high-sierra-mac HostName 192.168.1.100 # 换成你的Mac的IP地址或主机名 User your-username # 换成你的登录用户名 ForwardAgent yes - 之后用
ssh my-high-sierra-mac登录远程主机,这时远程会话会直接复用本地ssh-agent里的密钥,git pull/push等操作就不会再提示输密码短语了。
方法2:远程会话手动启动ssh-agent(临时应急用)
如果只是临时远程操作,不想改配置,可以用这个方法:
- 远程登录到High Sierra主机后,先启动ssh-agent:
eval "$(ssh-agent -s)" - 然后添加你的密钥,这时会提示输入密码短语:
输入一次后,本次远程会话内的所有SSH相关操作都不用再输密码了,但每次远程登录都要重复这两步。ssh-add ~/.ssh/id_rsa
方法3:修改远程主机的SSH配置(需注意权限)
这个方法可以让远程会话尝试读取钥匙串,但因为非GUI环境的限制,第一次还是要输密码短语,之后会存在钥匙串里:
- 远程登录后,编辑
~/.ssh/config文件:Host * AddKeysToAgent yes UseKeychain yes - 保存后,重启远程主机的SSH服务(需要管理员权限):
下次远程登录时,第一次输入密码短语后,后续操作就可以自动读取钥匙串了。sudo launchctl stop com.openssh.sshd && sudo launchctl start com.openssh.sshd
补充说明
为什么本地操作正常?因为本地是在GUI桌面会话里,钥匙串服务已经加载,ssh-agent可以自动从钥匙串获取密码短语;而远程SSH会话没有绑定GUI会话,默认没有钥匙串访问权限,这就是问题的核心。
内容的提问来源于stack exchange,提问作者user2379888
相关产品推荐
相关产品推荐

