红宝石净SSH:如何使用网关与PUBKEY认证
-
22-09-2019 - |
题
我试图运行在几台机器我在工作中有一个脚本,以收集有关他们的一些信息,比如哪些OS他们正在运行什么服务在上面运行,一些配置,等我有一台机器上我登录SSH-ING,因为它具有公共密钥设置的任何其他机器,之前。从那里,我可以ssh到所有其他机器不询问我的密码。
我想要做的是自动记录到所有这些机器从一个,但剧本是我的本地机器上运行。所以,我只是了解了红宝石SSH网关,我试图说,但我似乎无法得到PUBKEY认证工作。
我做这样的事情:
gateway = Net::SSH::Gateway.new('gatewaymachine', 'username', :password => 'password')
all_machines.each do |machine|
gateway.ssh(machine, 'username') do |ssh|
uname = ssh.exec!('uname -a')
puts "machine: #{machine}; OS: #{uname}"
end
end
但我得到一个Net::SSH::AuthenticationFailed
例外。
如果,相反,我提供密码,如下所示:
gateway.ssh(machine, 'username', :password => 'password')
它的工作,但是这并不可行,因为密码不跨机器一样的。
有谁知道我怎样才能使这项工作?
感谢。
解决方案
是机器你说话的NAT防火墙后面?如果没有,你不需要红宝石SSH网关。
有您创建的起源箱公钥,为此,运行该程序的用户,并考虑到关键目标用户上的每个目标框?
$ ssh-keygen -t dsa # Only do this once
$ ssh-copy-id -i ~/.ssh/id_dsa.pub user@machine
(enter the password)
和确保关键工作:
$ ssh user@machine # should not ask for a password
一旦你做到了这一点,它是那样简单使用系统或反引号掏出来的ssh:
system('ssh machine "ls -l"')
不隶属于 StackOverflow