我正在使用Net / TELNET连接到尝试运行su命令的远程主机以获得root权限。这就是我这样做的方式
require 'net/telnet'
localhost = Net::Telnet::new("Host" => "192.147.217.27",
"Timeout" => 50,
"Prompt" => /[$%#>] \z/n)
localhost.login("dvsdkrp", "dvsdkvrp") { |c| print c }
localhost.cmd("cd /home/dvsdkrp/workdir/smruti") { |c| print c }
localhost.cmd("su") { |c| print c }
localhost.puts("passwd"){ |c| print c }
我能够登录并能够执行smruti目录,但是当我使用su命令时,它会将我带到密码提示,但即使我将Timeout参数更改为150
,我也会收到此错误Password: C:/Ruby/lib/ruby/1.8/net/telnet.rb:552:in `waitfor': timed out
while waiting for more data (Timeout::Error)
from C:/Ruby/lib/ruby/1.8/net/telnet.rb:679:in `cmd'
from tel.rb:7
我该怎么办?
答案 0 :(得分:1)
创建Telnet对象时指定的提示是在运行下一个命令之前要查找的提示。如果你超时,我认为它是因为它没有看到它所期望的提示。如果在发送“su”命令时使用“匹配”选项,则可以指定专门用于此命令的提示。
su_prompt = "Password: "
localhost.cmd("String" => "su", "Match" => /#{su_prompt}/) { |c| print c }
localhost.cmd("passwd")
此新提示仅用于当前命令。最初指定的提示仍然会在会话的其余部分生效。