gpt4 book ai didi

ruby - 使用 Ruby Net::SSH 通过多个系统的代理隧道

转载 作者:行者123 更新时间:2023-12-02 14:39:31 25 4
gpt4 key购买 nike

我需要一些关于如何使用 Ruby Net::SSH 和 Net::SCP gem 通过多个系统进行代理以执行命令或复制文件的建议。

它与我之前发布的这篇文章非常相似(如果不是几乎完全相同),使用的是 linux 命令行中的基本 ssh。

How to script multiple ssh and scp commands to various systems

例如,LOCAL 是我的本地系统。

系统 A 是连接到 LOCAL 的第二个系统

系统 B 是仅连接到系统 A 的第三个系统。此外,系统 B 被配置为仅允许系统 A 通过其 ssh key 进行访问。

对于来自命令行的普通 ssh,我以这种方式设置了我的 .ssh/config 文件:

Host systemA
HostName 192.168.0.10
User A-user

Host systemB
ProxyCommand ssh -e none systemA exec /bin/nc %h %p 2>/dev/null
HostName 192.168.0.11
User B-user
IdentityFile ~/.ssh/systemA_id_dsa

从这一点来看,只要我的 pub key 在 sysA 的 authorized_hosts 中(假设它总是如此),并且 sysA 的 pub key 在 authorized_hosts sysB 中(相同的假设),以下将无缝工作:
ssh systemB

我想在 Ruby 中实现这种确切的行为。我有一些类似于以下的代码:
require 'net/ssh'
require 'net/ssh/proxy/command'

str = 'ssh -l A-user -i /home/A-user/.ssh/id_dsa -e none 192.168.0.10 exec /bin/nc %h %p 2>/dev/null'
proxy = Net::SSH::Proxy::Command.new(str)

Net::SSH.start('192.168.0.11', 'B-user', :proxy => proxy) do |ssh|
ssh.exec! "ls -lA"
end

不幸的是,这不起作用。我收到身份验证失败。
~/.rvm/gems/ruby-1.9.3-p327/gems/net-ssh-2.6.2/lib/net/ssh.rb:201:in `start': root (Net::SSH::AuthenticationFailed)

我在这里想念什么?

最佳答案

您是否验证了您的代理命令实际上可以从命令行自行运行?看来您可能混合了身份 key 的顺序。

SystemA 已经认识您(?),您不需要为其指定身份。这也是基于 config您发布的设置。

在我看来,您似乎需要在 start 中将 SystemA 的身份转发给 SystemB。命令:

Net::SSH.start('192.168.0.11', 'B-user', 
:proxy => proxy,
:keys => [ "~/.ssh/systemA_id_dsa" ] ) do |ssh|
ssh.exec! "ls -lA"
end

然后跳过只是跳过代理设置命令中的身份文件。

关于ruby - 使用 Ruby Net::SSH 通过多个系统的代理隧道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14658363/

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