2017-01-27 4 views
0

を実行するために、TTYを持っている必要があり、私はルビーを使用してSSH接続経由でsudoコマンドを実行しているとの問題を抱えている:ネット:: SSH:あなたはsudoの

require 'net/ssh' 
Net::SSH.start("myserver.com", "login", :password => "pass") do |ssh| 
test = ssh.exec! 'sudo -iu admin /folder/script.sh' 
puts test 

私は次の参照結果:「sudoを:申し訳ありませんが、あなたsudoをする\ n」

を実行するための端末を持っている。しかし、私は、このコマンドを実行するときにする必要があります。パスワード 『パス』とサーバのmyserver.com」に接続してPUTTYに

sudo -iu admin /folder/script.sh 

を。この場合、sudoコマンドは正常に実行され、完了します。

私はこのsudoコマンドをTTYのRubyスクリプトでどのように実行できますか?

+0

['request_pty'](https://net-ssh.github.io/ssh/v2/api/classes/Net/)で望むなら、ターミナルをリクエストできます。 SSH/Connection/Channel.html#M000055) – tadman

+0

これは正確な複製ではないと思います。その質問では、SSHがハングします。この質問では、「sudoを実行するにはTTYが必要です」という結果が出ます。 –

答えて

1

これが私の仕事:

require 'net/ssh' 
host = "your.host.com" 
user = "user" 
password = "your pass" 

command = "ls" 

Net::SSH.start(host, user, password) do |session| 

    session.open_channel do |channel| 
    channel.on_data do |ch, data| 
     puts "data received: #{data}" 
    end 

    channel.request_pty do |ch, success| 
     if success 
     puts "pty successfully obtained" 
     ch.exec(command) 
     else 
     puts "could not obtain pty" 
     end 
    end 

    end 

    session.loop 
end 
0
require 'net/ssh' 

    cmd = 'sudo -iu admin /folder/script.sh' 

    Net::SSH.start("myserver.com", "login", "pass") do |ssh| 

    ssh.open_channel do |channel| 
     channel.request_pty 
channel.exec(cmd); 

    end 
    end 

奇妙なことを。私はこのコードを実行するとエラーなしで完了しますが、実際には成功しません。 PUTTYとRubyの結果が異なる

+0

AFAIK 'channel.exec(cmd)'が止まるのを待つ必要があります。 –

+0

詳細については、複製リンクを参照してください。 –

関連する問題