我想在Ruby中使用net / ssh gem在多个服务器上运行命令。 所有主机名都保存在一个文件中,从保存的文件中我逐个读取主机名,并希望使用NEXEC执行命令。
例如:对于单个主机,我运行了这个命令
$NEXEC="/data/bladelogic-7.3/bin/nexec"
$INSTANCE=`#{$NEXEC} hostname ls -ltr mypath`
如何使用NEXEC为多个主机名执行此操作
以下是我的代码:
require 'rubygems'
require 'net/ssh'
require 'net/ssh/multi'
puts "Enter the username"
@username=gets.chomp
File.open("path for multiple host file names","r") do |s|
s.each_line do |line|
Net::SSH.start(line.chomp,@username) do |ssh|
result=ssh.exec!("ls -ltr")
result1=`#{$NEXEC} line ls -ltr`
puts result
end
end
end
错误:
访问主机线时出错:远程主机未知
答案 0 :(得分:0)
这已经过了很长时间,但我遇到了类似的问题,让我们从这开始:
net/ssh
gem还需要一个类似于:password => 'your_pass_here'
etc
的库,您可以自动获取登录的用户名,这样您就不必输入用户名,只需输入密码< / LI>
File.read
建议编辑:
require 'rubygems'
require 'net/ssh'
require 'etc'
print "Enter password: "
@password = gets.chomp #<= You can get rid of the echo so they can't see your keystrokes if you want, see below
@username = Etc.getlogin
File.read(path/to/file.file) do |s|
s.each_line do |line|
Net::SSH.start(line.chomp, @username, :password => @password) do |ssh|
result = ssh.exec!("ls -la")
result1=`#{$NEXEC} line ls -ltr`
puts result
end
end
end
要摆脱密码的回声,一种方法是使用系统调用:
system "stty -echo"
@password = gets.chomp
system "stty echo"
总是 回想起回音,或者您无法看到该程序中输入的任何内容。