我试图登录计算机B,然后将文件从计算机A复制到计算机B。目标是将文件直接从计算机A传输到计算机B,我不想在中间使用第三台计算机。但是我发现在Ruby中很难完成。这是开始代码。

#!/usr/bin/env ruby

require 'rubygems'
require 'net/ssh'

cmd = 'scp -v -o UserKnownHostsFile=/dev/null -o GlobalKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@machineA:~/some.tar.gz .'
Net::SSH.start("machineB", "user", :password => "pwd") do |session|
  session.exec!(cmd) do |channel, stream, data|
    channel.send_data "pwd"
  end
end

我的想法是,我首先SSH到计算机B,然后尝试从中运行scp。第一个挑战是我无法将密码提供给scp(没有ssh抱怨的tty)。

有没有一种方法可以从Net::SSH生成Net::SCP对象?

谢谢。

最佳答案

好吧,回答您的问题:
显然是的,您可以将ssh session 作为参数传递。

scp = Net::SCP.new(session)

这实际上是Net::SCP.start所做的https://github.com/net-ssh/net-scp/blob/master/lib/net/scp.rb#L202

如果您的脚本在machineA上运行,您就不能这样做:
Net::SCP.upload!("machineB", "user",
  "~/some.tar.gz",
  "~/.",
  ssh: { password: "pwd" })

关于ruby-on-rails - Ruby:如何在ssh中执行scp?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28057687/

10-13 05:14