在Windows上,我如何设置sshd,以便可以通过基于密钥的身份validation从另一个Windows Box中ssh进入?

我正在设置一些部署自动化,我试图使用Ruby的Capistrano通过ssh远程执行命令。 我用cygwin的openssh在我用作testing受害者的盒子上运行sshd。

尽pipe如此,这将需要在每个受害者箱上使用相同的用户,并使用相同的密码,这显然是一个坏主意。

因此,我希望能够进行公共密钥authentication,但是经过几天我的头撞墙,我没有成功。 任何人都可以指向我在网上成功的指导来完成这个?

我觉得:

  • 在宿主机上本地生成一个公钥,我需要运行ssh-agent然后ssh-add,对不对? 如在,而不是受害者的箱子。
  • 在每个受害者箱子上,我需要将公钥带入/home/username/.ssh/authorized_keys
  • 然后我需要ssh到受害者的盒子,如ssh username@victim ,我不应该被要求input密码…对吗? 这是失败的一块; 我被要求input密码。

要禁用密码validation,您需要编辑受害者的sshd_config并设置PasswordAuthentication = no

或者在霸主上编辑ssh_config,或使用-o选项停止提供密码authentication。

您可以使用ssh -v -v -v ...更清楚地查看发生的事情。


编辑

我熟悉使用Putty,puttygen和pageant设置SSH公钥authentication,但不熟悉OpenSSH工具。 有了OpenSSH,我相信这个过程是

 $ ssh-keygen -t rsa 

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

ssh-keygen手册页应解释如何生成不受任何通行短语保护的私钥。 如果你这样做,你永远不会input密码短语,但它是不安全的。 如果您设置了身份validation代理,那么我相信在“霸主”的每个会话中只需要一次密码。 如果您没有密码短语,我认为没有必要设置身份validation代理,应该只是读取私钥而不提示input密码。