Ruby: 如何在 ssh 中执行 scp?
Ruby: how to do scp within ssh?
我正在尝试登录机器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 会话作为参数传递。
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" })
我正在尝试登录机器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 会话作为参数传递。
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" })