paramiko ssh / sftp多个命令

时间:2019-02-19 15:47:50

标签: python ssh sftp paramiko

我正在尝试使用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)

执行命令运行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()

1 个答案:

答案 0 :(得分:0)

对,这是我一直困扰着一两天的问题,我设法在注册Stackoverflow的10分钟内解决了问题。

执行命令运行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(),它似乎已经解决了问题,并且现在可以正常运行。