我需要读取一个我有权限(sudo)使用cat、less或tail命令读取的远程文件内容。我将使用Ruby编写程序,因此我应该使用Net::SSH来进行操作。这个文件是一个日志文件,所以它可能非常大。以下是我现在正在尝试的代码:
当我运行它时,我会得到以下输出:
正在处理 正在处理 正在处理 数据有效 正在处理 正在处理 正在处理 第三个有效 "\r\n" 远程端已完成发送数据 shell 已终止
实际上,日志中目前有几千行数据,因为我可以使用putty从实际服务器读取它。
如何从 channel.on_data 中获取它?
谢谢。
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
当我运行它时,我会得到以下输出:
正在处理 正在处理 正在处理 数据有效 正在处理 正在处理 正在处理 第三个有效 "\r\n" 远程端已完成发送数据 shell 已终止
实际上,日志中目前有几千行数据,因为我可以使用putty从实际服务器读取它。
如何从 channel.on_data 中获取它?
谢谢。
ssh USER@SERVER sudo cat /var/logs/httpd/ACCESS_log.2012.03.23
,您会看到什么? - dbenhur