2012-10-26 89 views
2

我的开发人员计算机上运行着一台虚拟机,并且需要通过SSH通过一个ant构建脚本将它rsync文件通过SSH“部署”。在生产中,安全是一个问题,但我真的不关心在与本地计算机上的开发虚拟机进行通信时的安全SSH实践。使用密码的蚂蚁脚本通过SSH进行的Rsync

我可以创建一个证书并将其安装在我的SSH密钥中,但这有点烦人。我宁愿只是通过蚂蚁脚本将密码发送到rsync,并将其称为一天。 (编辑 - 如果你没有示例,如果你不能处理这个问题,让我们假设这个服务器不在我的控制之下,他们的恶意系统管理员拒绝让我用任何理由用SSH密钥登录。 ?他只是个疯子!)

有没有什么办法可以在没有编辑你的ssh配置的情况下调用SSH,或者更具体的rsync在非交互模式下?换句话说,只需提供密码?

回答

4

我碰巧已经想出了一个解决方案,但这不是很容易,所以我想分享它。

基本上,我使用了一个名为“expect”的命令行程序来将我的密码填充到rsync的交互模式中。我也不想把它写成脚本,所以我把它压缩成一个单一的命令。这也适用于ssh以及rsync,如果你出于某种原因需要这些。

也许有更好的办法,但这似乎工作正常。

192.168.64.131显然是我本地虚拟机的IP地址。用您的ssh登录&通行证替换login_name和login_password。

expect -c 'spawn rsync -avz -e ssh ./ [email protected]:/var/www/auth/; expect "*?assword:*" {send "login_password\r"; interact};' 
+0

这个伟大的工程! (有一个邪恶的管理员谁不允许pubkey身份验证) – AaL

+0

很高兴听到它。正如@Mark O'Connor指出的那样,只要记住这是非常不安全的。确保符合您的用例要求。 – DougW

+0

作品!非常感谢 – siddhusingh

-2

使用SSH密钥更容易和更安全。一个例子在下面的答案给出:

+0

Yeeeep,使用证书。同样,不要说这不是大多数时候这样做的安全和正确的方式。但是,就我而言,我明确有意避免它。谁知道?也许我们正在处理不接受密钥的第三方服务器,或者出于某种原因无法安装我的证书。或者把它叫做智力好奇心。要点是,问题是关于不想要SSH密钥的答案。 – DougW