#!/usr/bin/env ruby
require "rubygems"
require "net/ssh"
@ssh = Net::SSH .start ( "192.168.0.10" , "user" , { :password => "user" } )
@command_executed = false
@ssh .open_channel do | channel|
channel.request_pty
#callback
channel.on_data do | channel, stdout_data|
if stdout_data =~ / assword:/
channel.send_data "root_pass" + "\n "
elsif !@su_command_executed
channel.send_data "whoami" + "\n "
@command_executed = true
else
print stdout_data
# channel.eof! でSSHのチャンネルが切れない
channel.eof !
end
# これだと
#
# whoami
# root
# root@cl1:~#
#
# の出力が無限に出続ける
#
# su - でrootになって一回コマンド実行して、stdout/stderr/戻り値をもらってチャンネル閉じたい
puts stdout_data
end
channel.exec "LANG=C su -"
end
@ssh .loop
@ssh .close
IyEvdXNyL2Jpbi9lbnYgcnVieQoKcmVxdWlyZSAicnVieWdlbXMiCnJlcXVpcmUgIm5ldC9zc2giCgpAc3NoID0gTmV0OjpTU0guc3RhcnQoIjE5Mi4xNjguMC4xMCIsICJ1c2VyIiwgezpwYXNzd29yZCA9PiAidXNlciJ9KQoKQGNvbW1hbmRfZXhlY3V0ZWQgPSBmYWxzZQoKQHNzaC5vcGVuX2NoYW5uZWwgZG8gfGNoYW5uZWx8CiAgY2hhbm5lbC5yZXF1ZXN0X3B0eQogIAogICNjYWxsYmFjawogIGNoYW5uZWwub25fZGF0YSBkbyB8Y2hhbm5lbCwgc3Rkb3V0X2RhdGF8CiAgICBpZiBzdGRvdXRfZGF0YSA9fiAvYXNzd29yZDovCiAgICAgIGNoYW5uZWwuc2VuZF9kYXRhICJyb290X3Bhc3MiICsgIlxuIgogICAgZWxzaWYgIUBzdV9jb21tYW5kX2V4ZWN1dGVkCiAgICAgIGNoYW5uZWwuc2VuZF9kYXRhICJ3aG9hbWkiICsgIlxuIgogICAgICBAY29tbWFuZF9leGVjdXRlZCA9IHRydWUKICAgIGVsc2UKICAgICAgcHJpbnQgc3Rkb3V0X2RhdGEKICAgICAgCiAgICAgICMgY2hhbm5lbC5lb2YhIOOBp1NTSOOBruODgeODo+ODs+ODjeODq+OBjOWIh+OCjOOBquOBhAogICAgICBjaGFubmVsLmVvZiEKICAgIGVuZAogICAgCiAgICAjIOOBk+OCjOOBoOOBqAogICAgIwogICAgIyB3aG9hbWkKICAgICMgcm9vdAogICAgIyByb290QGNsMTp+IwogICAgIwogICAgIyDjga7lh7rlipvjgYznhKHpmZDjgavlh7rntprjgZHjgosKICAgICMKICAgICMgc3UgLSDjgadyb29044Gr44Gq44Gj44Gm5LiA5Zue44Kz44Oe44Oz44OJ5a6f6KGM44GX44Gm44CBc3Rkb3V0L3N0ZGVyci/miLvjgorlgKTjgpLjgoLjgonjgaPjgabjg4Hjg6Pjg7Pjg43jg6vplonjgZjjgZ/jgYQKICAgIHB1dHMgc3Rkb3V0X2RhdGEKICBlbmQKCiAgY2hhbm5lbC5leGVjICJMQU5HPUMgc3UgLSIKZW5kCgpAc3NoLmxvb3AKCkBzc2guY2xvc2UK