私はリモートファイルの内容を読まなければなりません。(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
私は次の出力を得ることを実行すると:プロセスにプロセス でプロセス に
を データはプロセス で の作品プロセス 処理中 3番目 "リモート終了が完了しましたデータの送信 シェル終了
ログには実際には数千行のデータが含まれています。なぜなら、実際のサーバーからパテッティを読み取ることができるからです。
channel.on_dataからどのように取得できますか?
おかげ
、それはプレビュー-on実際のユーザ – DGM
に掛かって、rootユーザーとしてだった、私は自分のログファイルのいずれかでそれを走っていないし、それが正常に動作します...何の待ち時間最初にパスワードを送信するまでには長い時間がかかります。 – user254694
特定のログファイルに内容があることを確認しましたか?あなたがsshを直接使用する場合、あなたは何を見ますか?ssh USER @ SERVER sudo cat/var/logs/httpd/ACCESS_log.2012.03.23' – dbenhur