문제

SSH를 서버로 넘어 주어진 명령을 실행하고 출력을 가져 오는 루비 스크립트를 작성하려고합니다. 여기에 내가 지금까지 얻은 것은 다음과 같습니다. 루비 프로그래밍 책:

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:

내가 무엇을 잘못했는지 그리고 이것을 완화시키는 방법이 있습니까?

도움이 되었습니까?

해결책

이를 위해 Net-Ssh Gem을 사용하는 것이 좋습니다. sudo gem install net-ssh: http://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

다른 팁

체크 아웃 http://www.42klines.com/2010/08/14/what-to-expect-from-the-ruby-expect-library.html - 루비의 기대 유무에 관계없이 Pty를 사용하는 좋은 예가 있습니다.

나는 종종 "버퍼"를보고 무슨 일이 일어나고 있는지 알아낼 수 있기 때문에 Pty 만 사용하는 것이 더 쉽다는 것을 알게됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top