我正在使用Ruby,我有以下代码用于ssh-ing到路由器并运行存储在arrary中的一系列命令:
result = PTY.open do |masterIO, slaveFile|
r, w = IO.pipe
slaveFile.raw!
pid = spawn(sshCommand, :in=>r, :out=>slaveFile)
r.close; slaveFile.close;
output = ""
@commands.each do |subCommand|
w.puts subCommand
masterIO.each_line { |line| output += line }
end
next ouput
end
我的问题是masterIO.each_line { ... }
永远挂起。在上面的代码中,我想我需要关闭w
,但我仍然不确定如何编写它以使其表现得像我想要的那样。
注意:你必须记住子命令不是即时的,所以在写第二个命令之前,我需要一些等待,直到第一个命令完成执行。
编辑:
我想我可以用'&&'来连接所有命令每个之间。这将允许我按顺序运行它们,但我仍然不确定如何使这些命令的输出成功读取
答案 0 :(得分:0)
为什么你不能使用net / ssh lib?
require 'net/ssh'
Net::SSH.start('ip', 'user', password: 'your_password') do |ssh|
@commands.each {|command| ssh.exec(command)}
end