来自Ruby的一个命令行中的ssh和rsync

时间:2016-02-29 16:09:42

标签: ruby bash rsync

我需要编写一个bash命令行,它使用ssh连接到“first_machine”,然后从这里运行 'ajaxConversion'=>true, 到另一台机器rsync

这是我的代码:

remoteuser@10.2.2.150

我分别测试了ssh命令和first_machine = user@192.16.58.12 cmd="ssh #{first_machine} \"rsync -e\"ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null\" --archive -H /home/user/aaaaa remoteuser@10.2.2.150:/home/remoteuser/\" " exit_status = system("#{cmd}") 。它们工作正常,所以我可以从运行Ruby脚本的机器上执行ssh,并且:

rsync

rsync -e"ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --archive -H /home/user/aaaaa remoteuser@10.2.2.150:/home/remoteuser/ - >中启动时效果很好文件夹已被复制。

相反,当我通过Ruby脚本运行我的代码时,我收到错误:

#{first_machine}

如果单独运行命令,则不会发生此错误。

2 个答案:

答案 0 :(得分:0)

当您“单独运行命令”时,您将以具有已知权限和已设置环境的用户身份运行它。

Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).

是您提示,当帐户从代码登录时,权限不适合该帐户。这不是Ruby问题,它是因为没有使用正确的帐户,或者没有设置环境;它在Ruby之外。

答案 1 :(得分:0)

首先,在另一个答案中解决Tin Man指出的用户问题。您是否在first_machine和运行ruby脚本的用户之间设置了公钥身份验证?

然后,查看您的引文,您会看到传递给ssh的命令仅包含rsync -e。也许试试这个:

first_machine = 'user@192.16.58.12'
cmd="ssh #{first_machine} \"rsync -e 'ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null' --archive -H /home/user/aaaaa remoteuser@10.2.2.150:/home/remoteuser/\" "
exit_status = system(cmd)

免责声明:我之前从未使用过Ruby,但是对一些教程网站进行了2分钟的扫视,可以清楚地看到示例代码中存在语法错误。

是否有理由不将此作为bash脚本执行?