1

次のサンプルコードを試しています: http://www.ruby-doc.org/gems/docs/n/net-ssh-shell-0.2.0/README_rdoc.html

require 'net/ssh'
require 'net/ssh/shell'

Net::SSH::start('host', 'user', :password=>'password') do |ssh|
  puts ssh.exec!("hostname")
  ssh.shell do |sh|
    sh.execute "cd /usr/local"
    sh.execute "pwd"
    sh.execute "export FOO=bar"
    sh.execute "echo $FOO"
    p=sh.execute "grep dont /tmp/notexist"
    puts "Exit Status:#{p.exit_status}"
    puts "Command Executed:#{p.command}"
  end
end

パスワードを渡し、 でテストしてログインしていることを確認しましたssh.exec!("hostname")pwdandコマンドからの出力を期待していechoますが、表示されません。さらに、プログラム/スクリプトは最後にハングします。Windows で Ruby 1.9.3p429 (2013-05-15) [i386-mingw32] を使用しています。OS X と Ubuntu の SSH サーバーに対してテストしました。

ここに私の出力があります。トレースは、Ctrl-C を実行した私からのものです。

C:\sb>ruby test.sh
Exit Status:
Command Executed:grep dont /tmp/notexist
C:/Ruby193/lib/ruby/gems/1.9.1/gems/net-ssh-2.1.4/lib/net/ssh/ruby_compat.rb:22:
in `select': Interrupt
        from C:/Ruby193/lib/ruby/gems/1.9.1/gems/net-ssh-2.1.4/lib/net/ssh/ruby_compat.rb:22:in `io_select'
        from C:/Ruby193/lib/ruby/gems/1.9.1/gems/net-ssh-2.1.4/lib/net/ssh/connection/session.rb:201:in `process'
        from C:/Ruby193/lib/ruby/gems/1.9.1/gems/net-ssh-2.1.4/lib/net/ssh/connection/session.rb:161:in `block in loop'
        from C:/Ruby193/lib/ruby/gems/1.9.1/gems/net-ssh-2.1.4/lib/net/ssh/connection/session.rb:161:in `loop'
        from C:/Ruby193/lib/ruby/gems/1.9.1/gems/net-ssh-2.1.4/lib/net/ssh/connection/session.rb:161:in `loop'
        from C:/Ruby193/lib/ruby/gems/1.9.1/gems/net-ssh-2.1.4/lib/net/ssh/connection/session.rb:110:in `close'
        from C:/Ruby193/lib/ruby/gems/1.9.1/gems/net-ssh-2.1.4/lib/net/ssh.rb:191:in `start'
        from test.sh:5:in `<main>'
4

1 に答える 1

1

ここでの答えは、出力が必要だと判断したもの以外は出力が表示されないということです。次に、コマンドのリターンを通常の方法でレンダリングまたは出力するように指示する必要があります。

このコードでは、出力は 2 行だけで、次のとおりです。

puts "Exit Status:#{p.exit_status}"

puts "Command Executed:#{p.command}"

パスワードを待っているため、プログラムが進行していないように見えると思います。このコードを実行し、キーのみの ssh アクセスを使用すると、続行されます。ローカル システムに接続しているときに、パスワードを待っているようです。

これはsshセッションです。終了したい場合は、ある時点でセッションを終了する必要があります。

それでも、セッションからの出力が必要な場合は、ホスト名での出力と同じことを行う必要があります。プットを使用しました。上記の最後の2つについても同じことを行います。

ハングしているわけではなく、セキュア シェルの使用が完了したことを通知されていないだけです。

于 2013-06-28T15:40:54.693 に答える