使用ruby gem net-ssh-multi可一次在多个服务器上执行sudo命令
|
在上一个问题中,我弄清楚了如何在多个服务器上启动经过密码验证的ssh会话以运行单个命令。现在,我需要能够执行\“ sudo \”命令。问题是,net-ssh-multi没有分配伪终端(pty),而sudo需要运行该伪终端,从而导致以下错误:
[127.0.0.1:stderr] sudo:抱歉,您必须具有tty才能运行sudo
根据文档,伪终端可以通过对通道对象的方法调用来分配,但是,以下代码不起作用:上面会产生\“ 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
红宝石1.8.7(2008-08-11补丁程序级别72)[i386-cygwin]
没有找到相关结果
已邀请:
3 个回复
浮凰量
在这种情况下,'sudo \'位于其中。
坍锭嘉韭蓝
您也可以从/ etc / sudoers中删除tty请求。为此,运行
并注释
旗低饶彤