我正在尝试使用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()
当我到达沟通时,程序会卡住。
答案 0 :(得分:0)
请勿使用Popen
来致电ssh
。相反,使用一个在Python中进行所有操作的库,例如优秀的Paramiko。在你的情况下,它可能看起来像这样:
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()