Python+;如何建立ssh连接?

Python+;如何建立ssh连接?,python,linux,bash,ssh,Python,Linux,Bash,Ssh,我一直试图通过Python+pexpect建立ssh连接,但是我无法发送我想要的行 我认为这当然是一个语法问题,但我不知道它发生在哪里 #! /usr/bin/python # -*- encoding: utf-8 -*- import re import pexpect import sys child = pexpect.spawn ("gnome-terminal -e 'bash -c \"ssh -X user@localhost; exec bash\"'") child.e

我一直试图通过Python+pexpect建立ssh连接,但是我无法发送我想要的行

我认为这当然是一个语法问题,但我不知道它发生在哪里

#! /usr/bin/python # -*- encoding: utf-8 -*-
import re
import pexpect
import sys



child = pexpect.spawn ("gnome-terminal -e 'bash -c \"ssh -X user@localhost; exec bash\"'")
child.expect ("user@localhost\"''s password.*:\"'")
child.sendline ('xxyyzz')

print "OK"

问题是,密码“xxyyz”从未出现在终端上,因此我认为
子.sendline
不起作用,是一个语法问题。

您正在将输入传递到
gnome终端
进程。这是行不通的,因为需要输入的是
ssh
(从技术上讲是
bash
,但是bash的
stdin
也是
ssh
),而不是
gnome终端


不管怎样,你可能很难让它可靠地工作。您可能应该考虑使用Python SSH库。

好的选择包括:

  • -低级Python SSH库
  • -更高级别的库(在引擎盖下使用Paramiko)

    • 谢谢你的建议,但我更喜欢使用pexpect。我找到了方法:

      #!/usr/bin/env python
      import pexpect
      ssh_newkey = 'Are you sure you want to continue connecting'
      # my ssh command line
      child=pexpect.spawn('ssh username@server uname -a')
      i=child.expect([ssh_newkey,'password:',pexpect.EOF])
      if i==0:
         print "I say yes"
         child.sendline('yes')
      i=child.expect([ssh_newkey,'password:',pexpect.EOF])
      if i==1:
         print "I give password",
         child.sendline("xxxx")
         child.expect(pexpect.EOF)
      elif i==2:
         print "I either got key or connection timeout"
      pass
      print child.before # print out the result
      

      问候

      好的,那么如何在ssh的输入stdin中包括Paramiko和de-pass呢?你能给我举个例子吗?@user3421938你应该检查Paramiko文档。你可以从这里开始: