我正在尝试为充当服务器的 Mac OS X 10.8.3 添加无密码 ssh 访问权限。我遵循了如下说明:
http://osxdaily.com/2012/05/25/how-to-set-up-a-password-less-ssh-login/
但是当我执行 ssh 时[电子邮件保护]我仍然被提示输入密码。
看完之后:
当我在客户端机器上执行 ssh-add 时,我得到:
[michael@varga (Sun May 26 09:56:32) ~]% ssh-add
Enter passphrase for /Users/michael/.ssh/id_rsa:
但是当我尝试在服务器的命令行上使用 ssh-add 命令时,它什么也没做:
[michael@maz (Sun May 26 10:00:25) ~]% ssh-add
[michael@maz (Sun May 26 10:01:03) ~]% ssh-add -K
我认为这可能与我遇到的仍然需要我提供密码的问题有关。
关于如何修复 ssh-add 有什么建议吗?
答案1
您不需要在您的服务器上运行ssh-add
或。ssh-agent
您应该ssh-agent
在客户端上运行(varga
)。这将为ssh
程序创建一个套接字以检查是否已解锁密钥。ssh-agent
将打印一些您必须定义的环境变量 - 您通常使用 来执行此操作eval $(ssh-agent)
,它既启动代理又导出所有必要的变量。
从您的问题中我可以看出,ssh-add
要求输入密码并将密钥添加到代理,这意味着代理正在运行并且所有这些变量都已导出(至少在您用于运行的 shell 中ssh-add
)。但现在要ssh
查看代理,您必须确保这些变量也在运行的会话中导出ssh
。
在服务器上运行代理时不需要输入密码,这ssh-add
意味着代理正在服务器上运行(您不需要它),并且根本没有需要添加的密钥,因此它会默默退出。
为什么ssh
客户端要求输入密码?可能是因为您向代理添加了错误的密钥。您确定可以登录服务器吗使用密钥文件? 你确定当你尝试登录时会要求输入密码吗密钥文件,而不是普通用户密码?首先确保公钥身份验证正常工作。
答案2
我猜测是以下两种情况之一。
您的服务器上没有运行 ssh-agent。要验证服务器上是否运行了 ssh-agent,请查看是否设置了 SSH_AUTH_SOCK 环境变量:
echo $SSH_AUTH_SOCK
另一种可能性是,您误解了 ssh 密钥对的工作方式。您在服务器上安装了公钥吗?如果您有 ssh-copy-id,这很简单。在客户端上:
ssh-copy-id user@server
如果没有,您需要将客户端上的 ~/.ssh/id_rsa.pub 的内容插入到服务器上的 ~/.ssh/authorized_keys 中。例如(假设您没有在服务器上设置其他密钥):
scp ~/.ssh/id_rsa.pub user@server:.ssh/authorized_keys
ssh user@server chmod 0600 .ssh/authorized_keys
诊断此问题的一种方法是运行 ssh 并显示详细输出:
ssh -v user@host
它应该向您显示密钥对可用于身份验证:
debug1: Authentications that can continue: publickey,password
它实际上尝试使用密钥进行身份验证:
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/$user/.ssh/id_rsa
并且公钥认证成功:
debug1: Authentication succeeded (publickey).