문제
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 만 사용하는 것이 더 쉽다는 것을 알게됩니다.
제휴하지 않습니다 StackOverflow