• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Нужна помощь с кодом на Python

misterX

Grey Team
01.06.2022
280
11
BIT
377
Всем привет товарищи. Состряпал код на Python для отправки файла по SSH с хостовой на виртуальную машину - но при его выполнении файл не отправился. Библиотека установлена, Логин и пароль для подключения верен, хост и порт тоже верен и открыт, SSH на обеих машинах есть и работает, тем более что попробовал подключиться и создать файл через PuTTY - всё прошло успешно. Подскажите в чём может быть проблема? Заранее спасибо)
Вот сам код

Код:
import paramiko

# Подключение к SSH серверу
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# Здесь нужно указать адрес и порт своей виртуальной машины
host = 'тут мой хост'
port = тут мой порт

# Здесь нужно указать логин и пароль для SSH подключения
username = 'логин'
password = 'пароль'

# Подключение к SSH серверу
ssh.connect(host, port, username, password)

# Путь к локальному файлу, который нужно отправить
local_path = r'C:\Users\misterX\Desktop\Worker\primerSSH.txt'

# Путь на удаленной машине, куда нужно отправить файл
remote_path = r'C:\Users\misterX\Desktop\eth'

# Отправка файла по SSH
sftp = ssh.open_sftp()
sftp.put(local_path, remote_path)
sftp.close()

# Закрытие SSH соединения
ssh.close()
 
Решение
Функция sftp.put() полагается на полные пути (включая имена файлов), а не только на путь до директории. Поэтому remote_path не должен указывать только путь к папке, а должен указывать полный путь к файлу. Пример: remote_path = '/home/user/mvp/data.txt'.
Спасибо дружище, я уже с этим давно разобрался и тему можно закрыть)

D3L1F3R

Red Team
20.02.2022
346
133
BIT
665
Только что добавил и проверил - так ничего и не вышло(
Попробуйте сразу дать значения, а не записывать их в переменные, попробуйте испльзовать без ковычек или наоборот их добавить. Перепроверьте точно ли работает ssh, есть стабильное подключение, брандмауэр и т.д т.п
 

Exited3n

Red Team
10.05.2022
745
259
BIT
715
Не нужен целый Paramiko для переноса файла.
Для этого используется scp

Типо так:
Python:
import subprocess
subprocess.run(["scp", r"C:\temp\test.txt", f"exited3n@10.0.0.1:2222:/home/exited3n/file.txt"])

Но предварительно должен быть решен вопрос с авторизацией по ключу.
Иначе будет timeout, т.к. сервер будет ждать ввод пароля.
 

Exited3n

Red Team
10.05.2022
745
259
BIT
715
Если очень хочется Paramiko то там рекомендую так же использовать scp.
Python:
from paramiko import SSHClient
from scp import SCPClient

ssh = SSHClient()
ssh.load_system_host_keys()
ssh.connect('10.0.0.1:2222')

with SCPClient(ssh.get_transport()) as scp:
    scp.put('test.txt', 'test2.txt')
    scp.get('test2.txt')
 

misterX

Grey Team
01.06.2022
280
11
BIT
377
Если очень хочется Paramiko то там рекомендую так же использовать scp.
Python:
from paramiko import SSHClient
from scp import SCPClient

ssh = SSHClient()
ssh.load_system_host_keys()
ssh.connect('10.0.0.1:2222')

with SCPClient(ssh.get_transport()) as scp:
    scp.put('test.txt', 'test2.txt')
    scp.get('test2.txt')
Спасибо. Когда вернусь домой не знаю, но обязательно попробую. Спасибо)
 

Belyyy

New member
15.10.2023
1
0
BIT
0
Функция sftp.put() полагается на полные пути (включая имена файлов), а не только на путь до директории. Поэтому remote_path не должен указывать только путь к папке, а должен указывать полный путь к файлу. Пример: remote_path = '/home/user/mvp/data.txt'.
 

misterX

Grey Team
01.06.2022
280
11
BIT
377
Функция sftp.put() полагается на полные пути (включая имена файлов), а не только на путь до директории. Поэтому remote_path не должен указывать только путь к папке, а должен указывать полный путь к файлу. Пример: remote_path = '/home/user/mvp/data.txt'.
Спасибо дружище, я уже с этим давно разобрался и тему можно закрыть)
 
Последнее редактирование:
Решение
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!