Мне нужно прочитать содержимое удаленного файла, для которого у меня есть права на чтение (sudo)
кот, меньше или хвост.
Я собираюсь делать это в Ruby, поэтому я предполагаю, что мне следует использовать Net :: SSH для этого.
Файл представляет собой файл журнала, поэтому он может быть довольно большим.
Это код, который я сейчас пытаюсь:
require 'rubygems'
require 'net/ssh'
cmd = "sudo cat /var/logs/httpd/ACCESS_log.2012.03.23"
Net::SSH.start( "SERVER" , "USER", :password => "PASSWORD") do |ssh|
ssh.open_channel do |channel|
channel.request_pty
channel.exec(cmd);
channel.on_close do
puts "shell terminated"
end
channel.on_eof do |ch|
puts "remote end is done sending data"
end
channel.on_extended_data do |ch, type, data|
puts "got stderr: #{data.inspect}"
end
channel.on_data do |channel, data|
if data =~ /^\[sudo\] password for USER:/
puts "data works"
channel.send_data 'PASSWORD'
end
channel.on_data do |ch,data|
puts "in third"
puts data.inspect
end
end
channel.on_process do |ch|
puts "in process"
end
ssh.loop
end
end
Когда я запускаю это, я получаю следующий вывод:
в процессе
в процессе
в процессе
данные работают
в процессе
в процессе
в процессе
в третьем
«\ Г \ п»
удаленный конец сделал отправку данных
оболочка прекращена
На самом деле в журнале в настоящее время содержится несколько тысяч строк данных, потому что я могу читать его с реального сервера, используя замазку.
Как мне получить это из channel.on_data?
Спасибо