0

我正在尝试使用 ssh spawn 向远程机器发送命令。我正在使用发送命令Popen(),我可以看到命令已完成,但之后我尝试使用communicate()(关闭会话并获取返回码)并且程序卡住了。

cmd = """expect -c 'spawn ssh -o LogLevel=quiet """ \
      """-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o PreferredAuthentications=publickey """ \
      """-o ConnectTimeout=10 -2 -o CheckHostIP=no -i {0} {1}@{2} ;\
      """expect "#";send "mkdir test9\n" ;interact'""".format(self.sshKey, SSHUser, self.hostname) 
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p_stdoutdata, p_stderrdata = process.communicate()

当我到达通信时,程序卡住了。

4

1 回答 1

0

Don't use Popen to call ssh. Instead, use a library that does it all in-process in Python, such as the excellent Paramiko. In your case it might look something like this:

import paramiko

client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.WarningPolicy())
client.connect(self.hostname, 22, SSHUser, password)

sftp = paramiko.SFTPClient.from_transport(client.get_transport())
sftp.mkdir("test9")
sftp.close()

client.close()
于 2015-12-16T08:13:50.213 回答