我试图运行在几台机器我在工作中有一个脚本,以收集有关他们的一些信息,比如哪些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"')
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top