gpt4 book ai didi

ruby - 使用 ruby​​ gem net-ssh-multi 同时在多个服务器上执行 sudo 命令

转载 作者:数据小太阳 更新时间:2023-10-29 07:11:19 27 4
gpt4 key购买 nike

previous question 中我想出了如何在多个服务器上启动经过密码验证的 ssh session 来运行单个命令。现在我需要能够执行“sudo”命令。问题是,net-ssh-multi 没有分配 sudo 需要运行的伪终端 (pty),导致以下错误:

[127.0.0.1 : stderr] sudo: sorry, you must have a tty to run sudo

根据documentation , 可以通过调用 channel 对象的方法来分配伪终端,但是,以下代码不起作用:它会生成上面的“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]

最佳答案

你能试试这样吗:

  channel.request_pty do |c, success|
if success
command = "sudo YOUR_COMMAND"
c.exec(command) do |c, success|
# Some processing
end
end
end

在这种情况下,“sudo”在里面。

关于ruby - 使用 ruby​​ gem net-ssh-multi 同时在多个服务器上执行 sudo 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6194134/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com