在 Windows 上,我该如何设置 sshd 以便能够从另一个 Windows 系统通过基于密钥的身份验证进行 ssh 访问?

在 Windows 上,我该如何设置 sshd 以便能够从另一个 Windows 系统通过基于密钥的身份验证进行 ssh 访问?

我正在努力设置一些部署自动化,其中一件事就是尝试使用 Ruby 的 Capistrano 通过 ssh 远程执行命令。我曾经使用过cygwin 的 openssh在我用作测试受害者的盒子上运行 sshd。

然而,从本质上讲,这将要求每个受害者机器上都有相同的用户,并使用相同的密码,这显然是一个坏主意。

因此,我想启用公钥身份验证,但经过几天的摸索,我还是没有成功。有人能给我提供网上成功实现此目的的指南吗?

我觉得:

  • 在主控机上本地生成公钥后,我需要运行 ssh-agent 然后运行 ​​ssh-add ,对吗?也就是说,不需要在受害者机上运行。
  • 在每个受害者盒子上,我需要将公钥放入 /home/username/.ssh/authorized_keys
  • 然后我需要像 ssh 一样连接到受害者机器ssh username@victim,系统不应该要求我输入密码...对吧?这是失败的部分;系统要求我输入密码。

答案1

要禁用密码验证,你需要在受害者上编辑 sshd_config 并设置 PasswordAuthentication=no

或者在 overlord 上编辑 ssh_config 或使用 -o 选项来停止它提供密码验证。

您可以使用它ssh -v -v -v ...来更清楚地了解正在发生的事情。


编辑

我熟悉使用 Putty、puttygen 和 pageant 设置 SSH 公钥身份验证,但不熟悉使用 OpenSSH 工具。使用 OpenSSH,我认为该过程是

$ ssh-keygen -t rsa

然后复制~/.ssh/id_rsa.pub到服务器~/.ssh/authorized_hosts并确保文件的权限为 600,目录的权限为 700。

ssh-keygen 手册页应该会解释如何生成不受任何密码保护的私钥。如果这样做,您将永远不必输入密码,但这是不安全的。如果您设置了身份验证代理,那么我相信每个“overlord”会话中只需要输入一次密码。如果您没有密码,我认为设置身份验证代理是没有意义的,应该只会读取私钥而不提示输入密码。

相关内容