Ruby 在一个命令行中使用 ssh 和 rsync
ssh and rsync in one command line from Ruby
我需要编写一个 bash 命令行,使用 ssh 连接到 "first_machine" 并从这里 运行 rsync
连接到另一台机器 remoteuser@10.2.2.150
。
这是我的代码:
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}")
我分别测试了 ssh 命令和 rsync
。它们工作正常,所以我可以从我 运行 Ruby 脚本和:
的机器上执行 ssh
rsync -e"ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --archive -H /home/user/aaaaa remoteuser@10.2.2.150:/home/remoteuser/
在 #{first_machine}
中启动时运行良好 -> 复制文件夹。
相反,当我通过 Ruby 脚本 运行 我的代码时,我收到错误:
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(605) [sender=3.0.9]
如果我单独运行命令就不会出现这个错误。
当您 "run the command separately" 时,您是 运行 作为具有已知权限和已设置环境的用户。
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
是您的提示,表明从代码登录时帐户的权限不正确。这不是Ruby的问题,是没有使用正确的帐号,或者没有设置环境的结果;它在 Ruby 外面。
首先修复另一个回答中铁皮人指出的用户问题。您是否在 first_machine
和 运行 用户 ruby
脚本之间设置了 public 密钥验证?
然后,查看您的引用,您会发现传递给 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 脚本执行?
我需要编写一个 bash 命令行,使用 ssh 连接到 "first_machine" 并从这里 运行 rsync
连接到另一台机器 remoteuser@10.2.2.150
。
这是我的代码:
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}")
我分别测试了 ssh 命令和 rsync
。它们工作正常,所以我可以从我 运行 Ruby 脚本和:
rsync -e"ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --archive -H /home/user/aaaaa remoteuser@10.2.2.150:/home/remoteuser/
在 #{first_machine}
中启动时运行良好 -> 复制文件夹。
相反,当我通过 Ruby 脚本 运行 我的代码时,我收到错误:
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(605) [sender=3.0.9]
如果我单独运行命令就不会出现这个错误。
当您 "run the command separately" 时,您是 运行 作为具有已知权限和已设置环境的用户。
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
是您的提示,表明从代码登录时帐户的权限不正确。这不是Ruby的问题,是没有使用正确的帐号,或者没有设置环境的结果;它在 Ruby 外面。
首先修复另一个回答中铁皮人指出的用户问题。您是否在 first_machine
和 运行 用户 ruby
脚本之间设置了 public 密钥验证?
然后,查看您的引用,您会发现传递给 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 脚本执行?