0

使用 Ruby 'net/ssh' 我可以根据目标系统登录中的 bash cmd 的输出在 ruby​​ 中设置一个变量吗?目标系统没有安装 ruby​​。从我的外壳(显然有红宝石)......

例如(这有效并返回主机名):

hosts = ['10.4.5.12', '10.4.5.18']
cmd = "/bin/hostname;"

hosts.each do |host|
    begin
         Net::SSH.start(host , username, :password => password, :paranoid=>false) $
         puts "\n#{host}\n"
         puts ssh.exec! cmd
         puts "\n"
    end
         rescue Timeout::Error
         puts "#{host} Timed out"
         rescue Errno::EHOSTUNREACH
         puts "#{host} Host unreachable"
         rescue Errno::ECONNREFUSED
         puts "#{host} Connection refused"
         rescue Net::SSH::AuthenticationFailed
         puts "#{host} Authentication failure"
    end
end

我想根据“cmd”的输出在我的脚本中使用一些额外的逻辑。如果主机名是 x 这样做...我想在 ruby​​ 中执行此操作 - 而不是 bash .. 有意义吗?因此,在我的 ruby​​ 脚本中 -> test = 目标系统上 cmd 的输出(仅限 bash),然后如果 test == x 我将运行第二个命令。

4

1 回答 1

0

您可以使用这样的语法

test = %x[ bash command ]

例如

1.9.3-p448 :001 > command = %x[ echo "Hello world" ]
=> "Hello world\n" 

您还可以通过调用检查最后一个命令的返回码

$?.exitstatus
于 2013-08-11T20:32:19.960 回答