【问题标题】:Telnet from telnet session in python从 python 中的 telnet 会话进行 Telnet
【发布时间】:2014-05-05 07:43:54
【问题描述】:

是否可以在 python 中远程登录到服务器并从那里远程登录到另一台服务器? 由于有一个控制器,我使用用户名和密码远程登录,并且从控制器命令行我需要以 root 身份登录才能运行 linux 命令。我将如何使用 python 做到这一点?

我使用telentlib 登录到路由器控制器,但我需要从路由器控制器再次登录才能进入 shell。这可以使用 python 吗?

谢谢!

【问题讨论】:

  • 明确一点:使用python; telnet 到控制器,然后从控制器 telnet 到服务器..?
  • 我认为您必须命令路由器会话才能打开额外的 telnet 到所需的 PC。这意味着你有两个 telnet 会话,.. pc1->router 和 router->pc2,其中 pc1 发送命令来控制 router->pc2 连接
  • Telnet 到控制器,一旦我登录到控制器,我需要以 root 身份登录才能看到 bash shell 提示

标签: python telnet


【解决方案1】:

刚刚用我手头的硬件和 telnetlib 进行了检查。没看到问题。 当您连接到第一台设备时,只需使用telnet.write('cmd') 发送所有必要的命令。它可能是sudo su\ntelnet 192.168.0.2\n 或其他任何东西。 Telnetlib 只记住自己的 telnet 连接,所有辅助连接都由相应的控制器处理。

【讨论】:

    【解决方案2】:

    你有没有考虑过使用expect(应该有一个python绑定);基本上,我认为你想做的是:

    1. 从您的 python 脚本中,使用 telnetlib 连接到服务器 A(输入用户名/密码)。
    2. 在这个“socket”中,发送剩余的命令,例如“telnet serverB”并使用expect(或其他一些机制)来检查你是否得到了预期的“用户:”提示;如果是,则发送用户,然后发送密码,然后发送任何命令,否则处理错误。

    这应该是非常可行的,并且在不支持更清洁 API 的旧产品中相当普遍。

    【讨论】:

    • 谢谢!我也尝试过这个想法,但问题是当我从控制器进入根目录并运行命令时,tn.read_all() 不会返回命令的输出。它给出了文件“/usr/lib/python2.4/telnetlib.py”,第 521 行,在 fill_rawq buf = self.sock.recv(50) 错误
    • 您能否在问题中包含您的代码(没有任何密码/敏感 ips /等)?
    【解决方案3】:

    您可以使用write() 发出 sudo 命令。

    tn.write("sudo\n")
    

    您也可以使用read_until() 来帮助获取凭据。

    tn.read_until("login: ")
    tn.write(user + "\n")
    if password:
        tn.read_until("Password: ")
        tn.write(password + "\n")
    

    【讨论】:

    • 这个我用过。但这只会将我带到控制器控制台,从那里我需要以 root 身份再次登录并提供密码以访问 linux shell> 我尝试使用 write 但是一旦主控制器会话开始,如果我尝试使用 write 登录到 root,它就会挂起那里
    猜你喜欢
    • 2011-07-17
    • 2013-08-24
    • 2013-11-19
    • 2019-02-15
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 2011-07-26
    • 2014-09-21
    相关资源
    最近更新 更多