您可以将公用密钥复制到远程计算机。只要它们启用了公共密钥身份验证,并且您的公共密钥存在于远程计算机上,您就可以ssh
访问计算机而无需提供密码。
首先,您需要生成一个公用/专用密钥对,如下所示:
ssh-keygen -t rsa
按照提示进行操作。当询问是否要使用密码保护密钥时,请说是!不对密钥进行密码保护是不明智的做法,我将向您展示如何只需要偶尔输入一次密码。
如果您已经有密钥对,则可以跳过上述步骤。
现在,假设您的ssh密钥在Mac上以形式存在~/.ssh/id_rsa.pub
,则可以通过运行以下命令将其安装在远程计算机上:
cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
对于上面引用的特定服务器示例,命令如下所示:
cat ~/.ssh/id_rsa.pub | ssh -p 2200 root@123.456.789.012 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
您必须输入密码root@123.456.789.012
才能执行此复制,但这应该是您最后一次执行此操作。假设远程服务器sshd
已设置为执行公私钥身份验证,那么现在当您ssh到该框时,它不应该要求您提供该root
帐户的密码-而是将要求您提供该密钥的密码。请继续阅读,以了解如何始终不需要输入这些内容。
对于要使用密钥而不是密码登录的每台计算机,重复上述操作。
请注意,任何拥有您~/.ssh/id_rsa
文件的人都可以通过ssh进入该计算机,root
而无需提供远程计算机的密码。保护密钥文件的密码可确保他们需要知道该密钥的密码才能使用它。确保该文件是安全的。在Mac上使用磁盘加密,并保持文件和~/.ssh/
目录的权限严格。
为了使您不必每次都输入密码即可更轻松地使用密钥,OS X ssh-agent
在计算机的后台运行一个进程。该代理将在您第一次使用密钥对时对其进行缓存,因此您只需要偶尔输入一次密码即可。如果您仅使Mac处于睡眠状态,而从不重启它,则可以长时间输入密码而无需输入密码。
您可以ssh-agent
通过运行以下命令来预缓存所有SSH密钥:
ssh-add
现在,您只需要记住密钥密码,而不需要记住许多其他帐户密码。我通常将关键密码保存在1Password中(无从属关系),从而进一步简化了我需要记住的密码数量。然后,我只是在1Password中查找它们,然后在终端重新启动Mac并导致运行ssh-agent
重新开始的奇怪时间在它们中剪切并粘贴它们。
如果在此问题中使用Terminal.app连接管理解决方案结合将密钥复制到远程计算机,则将获得非常接近PuTTY的GUI连接体验。
在服务器端,检查/etc/ssh/sshd_config
并确保:
PubkeyAuthentication yes
已在配置中启用(在OpenSSH中默认为启用)。您可能还希望设置:
PasswordAuthentication no
当您在那里时,将禁用基于密码的身份验证,并且密钥成为访问计算机的唯一方法。
如果对配置文件进行任何更改,则需要在计算机上重新启动sshd。