【问题标题】:How do i provide password for su command while using net/telnet in ruby在 ruby​​ 中使用 net/telnet 时如何为 su 命令提供密码
【发布时间】:2010-10-15 06:07:01
【问题描述】:

我正在使用 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

我该怎么办?

【问题讨论】:

  • 真的确定要发送未加密的根密码吗?为什么不使用 SSH?
  • pafcu 这对我来说不是问题意味着我在发送未加密的 root 密码时没有问题
  • 我也尝试了 ssh,但出现了一些身份验证失败错误
  • 我会设置 SSH 密钥,这样你就可以在没有密码的情况下进入 root。另一种选择是使用 Expect 而不是 Net::Telnet。
  • 感谢 Jason,但为什么无法使 su 命令成功运行并提示输入密码,但之后出现错误

标签: ruby scripting telnet


【解决方案1】:

您在创建 Telnet 对象时指定的提示符是它在运行下一个命令之前要查找的提示符。如果您超时,那么我认为是因为它没有看到预期的提示。如果您在发送“su”命令时使用匹配选项,则可以专门为此命令指定提示符。

su_prompt = "Password: "
localhost.cmd("String" => "su", "Match" => /#{su_prompt}/) { |c| print c }
localhost.cmd("passwd")

这个新提示仅用于当前命令。最初指定的提示在接下来的会话中仍然有效。

【讨论】:

  • 但是 D 我应该在哪一行提供密码
  • 执行'Match'行后,telnet会话看到临时提示后会等待输入。此时,您可以将密码发送给它。 (代码示例中的第 3 行)
  • main:Object (NameError) 的未定义局部变量或方法“su”
  • D 在尝试执行 Match line 时收到此错误
  • 你这个天才,但是在我还没弄明白之前的问题之前,请你解释一下是什么问题
猜你喜欢
  • 2011-06-18
  • 2014-07-22
  • 2015-05-31
  • 2014-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多