在hudson中运行脚本时,Putty不会缓存访问服务器的密钥

Cha*_* Xu 36 putty host hudson key

我有一个简单的自动化过程,需要通过SSH将一些文件从linux服务器复制到Windows.这可以使用腻子来完成.

SSH作为协议的一部分,验证主机的身份,如果不知道是正确的,将提示您接受主机的身份.当我用putty手动连接linux服务器时,它不会提示任何信息来接受主机的身份.但是,一旦我将这个自动化过程放入Hudson作为计划工作.确切的信息是:

服务器的主机密钥未缓存在注册表中.您无法保证服务器是您认为的计算机.服务器的rsa2密钥指纹是:ssh-rsa 1024 cc:78:13:a3:68:a6:59:7e:b8:23:2d:13:3e:66:9b:b9如果您信任该主机,请输入" y"将密钥添加到PuTTY的缓存中并继续连接.如果要仅进行一次连接,而不将密钥添加到缓存中,请输入"n".如果您不信任此主机,请按Return键放弃连接.将密钥存储在缓存中?(y/n)连接被放弃了.

假设主机密钥正确,通常你会在这里点击"Y",以便在将来的连接中存储它.存储在HKEY_CURRENT_USER\Software\SimonTatham\Putty\SshHostKeys下的注册表中

但遗憾的是,在Hudson中运行的自动化进程无法通过命中"Y"进行交互,以将主机密钥存储在putty缓存中.而且我也无法通过在dos命令下运行自动化过程来重现该问题.

有谁知道如何解决这个问题?

Jay*_*Jay 40

echo y | pscp -i /path/to/key/file user@remote:/tmp/file  .
echo y | plink -i /path/to/key/file scripts.sh
Run Code Online (Sandbox Code Playgroud)

它会在第一次将主机键fingureprint存储到以下位置,并且下次将忽略"y"

HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys
Run Code Online (Sandbox Code Playgroud)

  • 非常智能的解决方案来模拟与前缀"echo y |"的交互 (3认同)
  • 我尝试了一下,但遇到麻烦,直到我意识到我仍然包括--batch参数。我删除了它,它正常工作。 (2认同)

Cla*_*lay 19

对于内部服务器,盲目echo y | ...技巧可能足够(而且非常简单).

但是,对于通过Internet访问的外部服务器,接受服务器主机密钥一次而不是每次盲目接受都要安全得多.


创建一个可以在客户端计算机上运行的.reg文件.

  • 从任何机器以交互方式连接 plink ...
  • 验证并接受主机密钥
  • 打开 regedit
  • 导航 HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys
  • 右键单击该条目(将有一个名称rsa2@<port>:<address>)
  • 导出到.reg文件

在客户端计算机上缓存主机密钥

  • 在将连接到该服务器的任何客户端计算机上运行.reg文件
  • 确保使用将运行的用户帐户登录plink(即如果它是服务帐户)


小智 15

使用使用本地系统帐户的批处理调度程序时,我也遇到此问题.使用此帐户,您无法登录以接受主机密钥或手动设置该HKEY_CURRENT_USER值.我发现创建以下密钥:

HKEY_USERS\.DEFAULT\Software\SimonTatham\PuTTY\SshHostkeys
Run Code Online (Sandbox Code Playgroud)

并添加此处为本地系统帐户工作的主机字符串值.


小智 9

截至2014年9月9日,使用相应版本的plink(使用plink 0.66测试),您可以使用-hostkey选项,如下所示:

http://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/accept-host-keys.html

使用原始问题中的密钥:

plink -hostkey cc:78:13:a3:68:a6:59:7e:b8:23:2d:13:3e:66:9b:b9 user@remote 
Run Code Online (Sandbox Code Playgroud)

我在脚本中成功使用了"-hostkey"来解决初始主机密钥提示问题.

还记录了"-hostkey"以使用pscp(版本0.66).

请注意,如果更改主机或sshd服务器重新计算密钥,则必须更改主机密钥.


小智 6

echo y | plink -ssh <username@remotemachine> -pw <password> exit
plink -ssh <username@remotemachine> -pw <password> [yourcommand]
Run Code Online (Sandbox Code Playgroud)

说明:使用echo to pipe,用户输入所选命令的"y",然后退出.然后,下一个语句将再次调用plink可执行文件来运行您的命令.