【发布时间】:2011-09-05 20:28:11
【问题描述】:
在previous question 中,我想出了如何在多台服务器上启动经过密码验证的 ssh 会话来运行单个命令。现在我需要能够执行“sudo”命令。问题是,net-ssh-multi没有分配sudo需要运行的伪终端(pty),导致如下错误:
[127.0.0.1 : stderr] sudo: 抱歉,你必须有一个 tty 才能运行 sudo
根据documentation,可以通过对通道对象的方法调用来分配伪终端,但是,以下代码不起作用:它会生成上面的“no tty”错误:
require 'net/ssh'
require 'net/ssh/multi'
Net::SSH::Multi.start do |session|
# define the servers we want to use
my_ticket.servers.each do |session_server|
session.use session_server , :user => user_name , \
:password => user_pass
end
# execute commands on all servers
session.exec 'sudo ls /root' do |channel, stream, data|
if data =~ /^\[sudo\] password for user:/
channel.request_pty # <- problem must be here.
channel.send_data user_pass
end
end
# run the aggregated event loop
session.loop
end
$ ruby --version
ruby 1.8.7(2008-08-11 补丁级别 72)[i386-cygwin]
【问题讨论】: