gpt4 book ai didi

ruby - 使用 ruby​​ Net::SSH 通过 sudo 读取远程文件

转载 作者:数据小太阳 更新时间:2023-10-29 08:10:08 25 4
gpt4 key购买 nike

我必须读取我有权 (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 中获取它?

谢谢

最佳答案

我认为您需要在发送的密码中添加一个\n。这对我有用。请注意,在我注释掉 else 子句的地方,您也可以从那里获取信息,但它可以正常工作,但密码中带有 \n

require 'rubygems'require 'net/ssh'cmd = "sudo cat /var/log/mail.log"HOSTNAME = "myhost.example.com"USERNAME = "me"PASSWORD = "12345"Net::SSH.start( HOSTNAME , USERNAME, :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 #{USERNAME}:/        puts "data works"        channel.send_data "#{PASSWORD}\n"      else        #puts "OUTPUT NOT MATCHED: #{data}"      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  endend

关于ruby - 使用 ruby​​ Net::SSH 通过 sudo 读取远程文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9840573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com