连接到putty,通过python使用相同的会话登录到第二台linux服务器

连接到putty,通过python使用相同的会话登录到第二台linux服务器,python,putty,Python,Putty,有没有办法: 一,。打开putty/plink会话并通过python登录到linux服务器 二,。在当前会话中,通过python登录到另一台linux服务器 三,。让putty会话保持打开状态,用户可以手动运行其他命令吗 注: -脚本需要在通过putty访问linux服务器的Windows计算机上运行。 -1使用subprocess.Popen()很容易。 -我一直在为下次服务器登录发送密码。RSA ssh密钥在我们的服务器上受到限制 有什么想法吗?可能是python脚本的其他替代方案吗?是的,

有没有办法:
一,。打开putty/plink会话并通过python登录到linux服务器
二,。在当前会话中,通过python登录到另一台linux服务器
三,。让putty会话保持打开状态,用户可以手动运行其他命令吗

注:
-脚本需要在通过putty访问linux服务器的Windows计算机上运行。
-1使用subprocess.Popen()很容易。
-我一直在为下次服务器登录发送密码。RSA ssh密钥在我们的服务器上受到限制


有什么想法吗?可能是python脚本的其他替代方案吗?

是的,您可以这样做。使用
pexpect

但我必须注意,如果不安装cygwin,就不能在windows上使用pexpect。当您想在没有cygwin的情况下直接在windows上运行程序时,您需要使用
winexpect
()

Pexpect/Winexpect的用法:


在您的情况下,您必须使用
plink
而不是
ssh
winexpect
而不是
pexpect

我的理解正确吗?您想从Windows机器到Linux服务器a,然后从该ssh会话从Linux服务器a连接到Linux服务器B?绝对正确。好吧,我给了它另一个想法,所以它可以是相同的东西,但是从linux机器0(到机器A,从那里到机器B)非常感谢Igor,这是非常有用的模块。它可以使用ssh并执行任何命令。甚至超过会话p.interact()。我被困的那一刻就是输入第二个密码。这可能是个愚蠢的问题,但我看不出原因。例如(尽可能简单):
p=pexpect.spawn('sshmysurface@192.168.1.105)
一切都很好。所以现在我想从另一台需要密码的机器上复制一个文件:
p.sendline('scpmysurface@10.10.10.10:/home/file/tmp')
它确实使用expect查找“密码”,但不插入密码。奇怪,因为它在ssh加密时第一次插入密码没有问题
#!/usr/bin/env python
import pexpect

ssh_newkey = 'Are you sure you want to continue connecting'
# my ssh command line
p=pexpect.spawn('ssh mysurface@192.168.1.105 uname -a')

i=p.expect([ssh_newkey,'password:',pexpect.EOF])
if i==0:
    print "I say yes"
    p.sendline('yes')
    i=p.expect([ssh_newkey,'password:',pexpect.EOF])
if i==1:
    print "I give password",
    p.sendline("mypassword")
    p.expect(pexpect.EOF)
elif i==2:
    print "I either got key or connection timeout"
    pass
print p.before # print out the result