【问题标题】:Paramiko ssh/ sftp multiple commandsParamiko ssh/sftp 多个命令
【发布时间】:2019-02-19 15:47:49
【问题描述】:

我正在尝试使用 python 和 paramiko 实现一些自动化(使用我的基本初学者逻辑)。

我很高兴地说下面的代码有效。直到我添加命令 'rm -f testtrace.pcap 以删除通过 sftp 下载的文件。

定义登录凭据

host = input("Host: ")
user = input("User: ")
port = 22
password = getpass("Password: ")

打开 ssh 连接

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, port=port, username=user, password=password)

执行命令run tcpdump

stdin, stdout, stderr = ssh.exec_command('timeout 10 tcpdump port 5060 -nnv -s 0 -w testtrace.pcap')
channel = stdout.channel
channel.recv_exit_status()
ssh.close()

打开 sftp 连接

transport = paramiko.Transport((host, port))
transport.connect(username=user, password=password)
sftp = paramiko.SFTPClient.from_transport(transport)

文件下载

filepath = '/root/testtrace.pcap'
localpath = 'C:\\Users\\******\\Desktop\\python\\testtrace.pcap'
sftp.get(filepath, localpath)

执行命令删除文件

stdin, stdout, stderr = ssh.exec_command('rm -f testtrace.pcap')
channel = stdout.channel
channel.recv_exit_status()
ssh.close()

【问题讨论】:

  • 是的,这是我一两天都在努力解决的问题,我在注册 * 后的 10 分钟内设法解决了!

标签: python ssh sftp paramiko


【解决方案1】:

这个问题困扰了我一两天,我在注册 * 后的 10 分钟内设法解决了!

执行命令run tcpdump

stdin, stdout, stderr = ssh.exec_command('timeout 10 tcpdump port 5060 -nnv -s 0 -w testtrace.pcap')
channel = stdout.channel
channel.recv_exit_status()

我过早地关闭了 ssh 连接。通过从本节中删除 ssh.close() 似乎已经解决了问题并且现在可以正常运行。

【讨论】: