【发布时间】:2017-11-25 17:15:15
【问题描述】:
我必须读取我有权(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 用户,挂在实际用户身上
-
-在预览中,我在第一次发送密码之间确实挂了很长时间。
-
您已验证该特定日志文件确实有内容?直接用ssh看到什么
ssh USER@SERVER sudo cat /var/logs/httpd/ACCESS_log.2012.03.23