【问题标题】:To stop returning through SSH using Pexpect停止使用 Pexpect 通过 SSH 返回
【发布时间】:2010-04-30 18:20:14
【问题描述】:

我正在尝试使用 pexpect SSH 进入计算机,但我不想返回到原来的计算机。我的代码是:

#!/usr/bin/python2.6

import pexpect, os

def ssh():

    # Logs into computer through SSH
    ssh_newkey = 'Are you sure you want to continue connecting'
    # my ssh command line
    p=pexpect.spawn('ssh build@10.51.11.10')

    i=p.expect([ssh_newkey,'password:',pexpect.EOF])
    p.sendline("password")
    i=p.expect('-bash-3.2')

    print os.getcwd()
ssh()

这允许我通过 ssh 进入计算机,但是当我运行 os.getcwd() 时,pexpect 已将我返回到原始计算机。你看我想 ssh 到另一台计算机并使用他们的环境而不是使用 pexpect 拖动我的环境。任何人都可以建议如何让这个工作或替代方式。

谢谢

【问题讨论】:

    标签: python ssh pexpect


    【解决方案1】:

    启动ssh 的进程永远不会离开运行它的计算机。当您通过 ssh 连接到另一台计算机时,那里会启动一个新进程。这个过程是一个完全独立的东西,一个单独的程序来运行。如果你想在远程机器上做任何事情,你必须要么发送命令通过连接执行,要么复制你想要运行的程序并远程执行。

    【讨论】:

    • @Thomas Wouters -- 你知道有什么其他方法可以在不使用 pexpect 的情况下通过 ssh 进入另一台机器并输入密码吗?谢谢
    • 我不知道你为什么认为你需要另一种方式。不管你怎么做,你最终都会陷入同样的​​境地。但可以肯定的是:paramiko 也可以让你这样做。您仍然会得到单独的进程;事情就是这样运作的。
    【解决方案2】:

    您对另一台机器的实例是 p。 p.sendline 在另一台机器上你想要什么,然后 p.expect 结果。在概述的情况下

    p.sendline("pwd && hostname")
    p.expect("-bash-3.2") # although its better to set the prompt yourself so that this can be ported to any machine
    response = p.before
    print "received response [[" + response + "]]"
    

    试试看。还可以尝试模块 pxssh 以将 ssh 与 python 一起使用。该模块使用 pexpect 并包含其中的所有方法来完全按照您的要求进行操作

    【讨论】:

      猜你喜欢
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-03
      • 1970-01-01
      相关资源
      最近更新 更多