gpt4 book ai didi

ruby-on-rails - Ruby:如何用 ssh 做 scp?

转载 作者:太空宇宙 更新时间:2023-11-03 16:48:37 25 4
gpt4 key购买 nike

我正在尝试登录机器 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com