我一直尝试启动无密码 ssh,但都没有成功。我找到的文档有点不完整。至于生成公钥和私钥,我尝试了两种不同的方法:1. 使用 puttygen 生成密钥;2. 使用服务器的 ssh-keygen 创建密钥。这引出了我的第一个问题。 在本地机器上生成密钥重要吗?我见过的大多数文档都表明这一步要在本地机器上完成,但没有说明为什么或是否是强制性的。
从这一点来看,该过程似乎是将公钥移动到服务器的 .ssh 文件夹,并使用 cat 命令将 authorized_keys 和新公钥连接起来。据我所知,只要将 ssh 程序配置为使用密钥,您就应该能够无需密码登录。不幸的是,我还没有成功。我对这个过程的理解正确吗?什么可能导致设置不起作用?我对 ssh 的了解有限,所以我感觉有点像一条离开水的鱼。谢谢你的帮助!
系统设置
- 本地计算机 - Windows 7
- 主机-*nix
更新
根据此处的答案进行进一步测试后,问题最终是 putty 和 openssh 之间的兼容性问题。我通过使用服务器 (openssh) 生成密钥,然后使用 puttygen 将密钥转换为 putty 可识别的格式来解决这个问题。从这里我能够利用 pageant 将密钥提供给 tortoiseSVN。谢谢大家!
答案1
只要您同时拥有公钥和私钥,那么生成密钥的机器是什么并不重要。如果没有公钥和私钥,您就会遇到问题,因为其中一个解密另一个加密。
重要的是使用什么应用程序来生成密钥。PuTTYgen 可以工作,但为了兼容 OpenSSH,当然,您需要获取“用于粘贴到 OpehSSH 授权密钥文件中的公钥”并将其粘贴到服务器的每个用户授权密钥文件中。有些服务器会将其称为authorized_keys2
,其他服务器则只是authorized_keys
。(取决于 OpenSSH 的版本,以及是否设置为接受 SSHv1 身份验证信息。)您还需要确保它具有正确的权限(通常为 600,并由用户拥有),否则 OpenSSH 将忽略它。
如果你在两台机器上都使用 OpenSSH,那么只要民众密钥在 authorized_keys 中(或服务器的等效项),并且该文件具有正确的权限。
答案2
在本地机器上生成密钥重要吗?
是的。非常需要。您需要以将要运行 ssh 客户端的用户身份在将要运行它的机器上生成密钥。密钥与该身份绑定。
至于 authorized_keys 文件,您需要确保将其添加到 sshd_config 文件指定的目录中。默认值为 ~/.ssh/,因此请在远程计算机上的主目录中查找 .ssh 目录。如果没有 authorized_keys 文件,只需创建一个包含您在客户端上生成的密钥的文件。否则,请将其附加到其中。
如果仍然不起作用,则您要么没有尝试使用密钥进行身份验证(更有可能),要么服务器不接受密钥登录(不太可能)。
在PuTTY中,您是否在Connection>SSH>Auth下设置了私钥设置?
答案3
自动键入最常见的问题之一是权限。我通常的命令行如下(连接到需要添加键入的机器后):
mkdir .ssh
cat >> .ssh/authorized_keys2
# hit paste to enter public key text, then enter, Ctrl-D, enter again
chmod -R go-rwx .ssh
最后一个命令起了很大的作用;它在文件和目录上设置了适当的 *nix 权限,以便 SSH 能够接受它们并正确使用它们。
如果没有对文件的适当权限,OpenSSH(典型的服务器端软件)将会忽略您的密钥文件。
如果您使用 Tectia 在 Windows 机器上创建密钥,则可能需要先转换格式。OpenSSH 密钥看起来像一个长字符串“ssh-dss ABCD....ZYXW”。如果您的公钥是多行,带有“---- 公钥 ----”类型的标题,请先转换。假设您已将公钥上传为 tectiakey.txt:
ssh-keygen -i -f tectiakey.txt >> ~/.ssh/authorized_keys2