我必须读取远程文件的内容,我有权限(sudo)使用 cat,less或tail读取。使用ruby Net :: SSH通过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
当我跑,我得到以下输出:
过程 过程 过程 数据工作 过程 在过程 正在处理中 第三个 “\ r \ n” 远端已完成发送数据 壳终止
该日志实际上目前有几千行数据,因为我可以从使用putty的实际服务器读取它。
如何从channel.on_data中获取?
感谢
我跑它放在我自己的日志文件之一,它工作得很好......没有等待,这是root用户,挂在实际用户 – DGM 2012-03-23 14:44:30
-on预览,它在第一次发送密码之间挂了很长时间。 – user254694 2012-03-23 14:48:58
您已验证该特定日志文件是否包含内容?如果你直接使用ssh,你会看到什么'ssh USER @ SERVER sudo cat/var/logs/httpd/ACCESS_log.2012.03.23' – dbenhur 2012-03-23 14:56:56