在previous question中我想出了如何在多台服务器上启动密码验证的ssh会话来运行单个命令。现在我需要能够执行“sudo”命令。的问题是,净SSH-多不分配一个伪终端(PTY),其须藤需要运行,从而导致以下错误:使用ruby gem net-ssh-multi一次在多台服务器上执行sudo命令
[127.0.0.1 : stderr] sudo: sorry, you must have a tty to run sudo
根据该documentation,伪终端可以是在方法调用到信道分配对象,然而,下面的代码不工作:它产生上面的“无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
$红宝石--version
红宝石1.8.7( 2008-08-11 patchlevel 72)[i386-cygwin]
谢谢,那真是太棒了! – Dmitri 2011-06-01 22:04:21