我需要编写一个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}
如果单独运行命令,则不会发生此错误。
答案 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脚本执行?