以前の質問で、 パスワード認証された ssh セッションを複数のサーバーで開始して、単一のコマンドを実行する方法を見つけました。次に、「sudo」コマンドを実行できるようにする必要があります。問題は、net-ssh-multi が、sudo を実行する必要がある疑似端末 (pty) を割り当てないため、次のエラーが発生することです。
[127.0.0.1 : stderr] sudo: 申し訳ありませんが、sudo を実行するには tty が必要です
ドキュメントによると、チャネル オブジェクトへのメソッド呼び出しで疑似端末を割り当てることができますが、次のコードは機能しません。上記の「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 --バージョン
ruby 1.8.7 (2008-08-11 パッチレベル 72) [i386-cygwin]