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

  • Бесплатный ВЕБИНАР по OSINT с Екатериной Тьюринг: ➡️9 февраля в 19:00 (мск) пройдет урок

    Как безопасно искать информацию в открытых источниках

    🔥 Записаться 🔥

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

  • Автор темы Автор темы misterX
  • Дата начала Дата начала

misterX

Grey Team
01.06.2022
283
11
BIT
475
Всем привет товарищи. Состряпал код на 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'.
Спасибо дружище, я уже с этим давно разобрался и тему можно закрыть)
Только что добавил и проверил - так ничего и не вышло(
Попробуйте сразу дать значения, а не записывать их в переменные, попробуйте испльзовать без ковычек или наоборот их добавить. Перепроверьте точно ли работает ssh, есть стабильное подключение, брандмауэр и т.д т.п
 
Не нужен целый 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, т.к. сервер будет ждать ввод пароля.
 
Если очень хочется 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')
 
Если очень хочется 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')
Спасибо. Когда вернусь домой не знаю, но обязательно попробую. Спасибо)
 
Функция sftp.put() полагается на полные пути (включая имена файлов), а не только на путь до директории. Поэтому remote_path не должен указывать только путь к папке, а должен указывать полный путь к файлу. Пример: remote_path = '/home/user/mvp/data.txt'.
 
Функция sftp.put() полагается на полные пути (включая имена файлов), а не только на путь до директории. Поэтому remote_path не должен указывать только путь к папке, а должен указывать полный путь к файлу. Пример: remote_path = '/home/user/mvp/data.txt'.
Спасибо дружище, я уже с этим давно разобрался и тему можно закрыть)
 
Последнее редактирование:
Решение
Мы в соцсетях:

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