![在 Windows 上,我该如何设置 sshd 以便能够从另一个 Windows 系统通过基于密钥的身份验证进行 ssh 访问?](https://linux22.com/image/527321/%E5%9C%A8%20Windows%20%E4%B8%8A%EF%BC%8C%E6%88%91%E8%AF%A5%E5%A6%82%E4%BD%95%E8%AE%BE%E7%BD%AE%20sshd%20%E4%BB%A5%E4%BE%BF%E8%83%BD%E5%A4%9F%E4%BB%8E%E5%8F%A6%E4%B8%80%E4%B8%AA%20Windows%20%E7%B3%BB%E7%BB%9F%E9%80%9A%E8%BF%87%E5%9F%BA%E4%BA%8E%E5%AF%86%E9%92%A5%E7%9A%84%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%E8%BF%9B%E8%A1%8C%20ssh%20%E8%AE%BF%E9%97%AE%EF%BC%9F.png)
我正在努力设置一些部署自动化,其中一件事就是尝试使用 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”会话中只需要输入一次密码。如果您没有密码,我认为设置身份验证代理是没有意义的,应该只会读取私钥而不提示输入密码。