Paramiko ssh / sftp несколько команд - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь добиться некоторой автоматизации с помощью 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()

1 Ответ

0 голосов
/ 19 февраля 2019

Именно поэтому проблему, с которой я боролся в течение дня или двух, мне удалось решить в течение 10 минут после регистрации в Stackoverflow!.

Выполнить команду 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 () из этого раздела, он, похоже, решил проблему и теперь работает правильно.

...