2017-01-18 37 views
1

サーバーに接続していますが、コマンドを実行して出力を印刷します。ここでは、コードです:SSHコマンドの出力結果が表示されない

def log_in 
    Net::SSH.start('hostname', 'username', :password => "password") do |ssh| 
    ssh.open_channel do |channel| 
     output = channel.exec "ls" do |ch, success, data| 
     if success then 
      alert "Result: #{output} #{success} #{data}" 
     end 
     end 
    end 
    end 
end 

結果は真と「データ」は空の状態であること、空のリスト[]、「成功」である「出力」です。明らかに、ターミナルからログインして "ls"コマンドを実行したときに、いくつかのファイル/フォルダがリストされているように、これは当てはまりません。私のミスはどこですか?

面白いことに、私がコマンドとしてぎこしりを送ると、 "ls"の代わりに "asdfgh"を送り、同じ([]、真、空)を返します。 シューズ/ルビーを使用する。

答えて

1

docsをご覧ください。 2番目の引数としてexecメソッドに渡すブロックは、2つの引数chsuccessしか必要としません。データが利用可能になると起動するコールバックを追加する必要があります。例:

channel.on_data do |ch, data| 
    puts "got stdout: #{data}" 
end 

ssh.execメソッドを使用することもできます。

Net::SSH.start('hostname', username, :password => password) do |ssh| 
    ssh.open_channel do |channel| 
    output = channel.exec "ls" do |ch, success, data| 
     if success then 
     channel.on_data do |ch, data| 
      alert "#{data}" 
     end 
     end 
    end 
    end 
    ssh.loop 
end 

問題だった、ログイン時のウェルカムメッセージが存在する(とそれの最初の行は空白です):

1

これは動作します。 "ssh.loop"はウェルカムメッセージのすべての行を調べ、最後に "ls"コマンドの結果に進むことができます。

関連する問題