4

サーバーに ssh 接続し、特定のコマンドを実行し、そこから出力を取得する Ruby スクリプトを作成しようとしています。これは私がこれまでに得たもので、主にプログラミングRubyの本から改作されています:

require 'pty'
require 'expect'

$expect_verbose = true
PTY.spawn("ssh root@x.y") do |reader, writer, pid|
  reader.expect(/root@x.y's password:.*/)
  writer.puts("password")
  reader.expect(/.*/)
  writer.puts("ls -l")
  reader.expect(/.*/)
  answer = reader.gets
  puts "Answer = #{answer}"
end

残念ながら、私が戻ってきたのはこれだけです:

Answer = .y's password:

私が何を間違っていたのか、これを軽減する方法はありますか?

4

2 に答える 2

7

このためには、net-sshgemを使用することをお勧めします::http sudo gem install net-ssh: //net-ssh.rubyforge.org/ssh/v2/api/index.html

コードは次のようになります。

require 'rubygems'
require 'net/ssh'

Net::SSH.start('your-server', 'username', :password => "password") do |ssh|
  puts ssh.exec!("ls -la")
end
于 2009-01-30T10:35:56.040 に答える
2

http://www.42klines.com/2010/08/14/what-to-expect-from-the-ruby-expect-library.htmlをチェックしてください。Ruby の Expect を使用した場合と使用しない場合の PTY の使用例がいくつかあります。

「バッファ」を見て、何が起こっているのかを理解できるので、PTY のみを使用する方が簡単であることがよくあります。

于 2011-08-26T09:10:40.497 に答える