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

  • Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

misterX

Grey Team
01.06.2022
273
11
BIT
165
Всем привет товарищи. Состряпал код на 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'.
Спасибо дружище, я уже с этим давно разобрался и тему можно закрыть)

Exited3n

Red Team
10.05.2022
682
228
BIT
472
Если очень хочется 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
273
11
BIT
165
консоль через секунд 5 закрывается без каких либо выводов ошибок или чего то ещё.
 

misterX

Grey Team
01.06.2022
273
11
BIT
165
После каждый команды ставь input() и смотри print(), принтуй всё.
Не помогает, консоль так же закрывается без моего участия. В чём беда то...? Вот так допилил код но всё равно не файл не отправляется, ни ошибок никаких не видно

Код:
import paramiko

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

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

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

try:
    # Подключение к 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()

    print("Файл успешно отправлен по SSH.")

except paramiko.AuthenticationException:
    print("Ошибка аутентификации. Проверьте логин и пароль.")
except paramiko.SSHException as e:
    print("Ошибка SSH соединения:", str(e))
except paramiko.SFTPException as e:
    print("Ошибка передачи файла по SFTP:", str(e))
except Exception as e:
    print("Произошла ошибка:", str(e))

input("Нажмите Enter для выхода...")
 

D3L1F3R

Red Team
20.02.2022
309
101
BIT
397
Не помогает, консоль так же закрывается без моего участия. В чём беда то...? Вот так допилил код но всё равно не файл не отправляется, ни ошибок никаких не видно

Код:
import paramiko

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

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

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

try:
    # Подключение к 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()

    print("Файл успешно отправлен по SSH.")

except paramiko.AuthenticationException:
    print("Ошибка аутентификации. Проверьте логин и пароль.")
except paramiko.SSHException as e:
    print("Ошибка SSH соединения:", str(e))
except paramiko.SFTPException as e:
    print("Ошибка передачи файла по SFTP:", str(e))
except Exception as e:
    print("Произошла ошибка:", str(e))

input("Нажмите Enter для выхода...")
Стопнай каждую строку, на каком моменте будет вылет, там и ошибка.
 

D3L1F3R

Red Team
20.02.2022
309
101
BIT
397
Не совсем понял..
У вас программа даже до этапа подключения не доходит
Python:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
Вот здесь где-то ошибка, Попробуйте заменить ssh на client как в гайде, не знаю как имя переменной может решать, но всё может быть.
 

D3L1F3R

Red Team
20.02.2022
309
101
BIT
397
Python:
from paramiko import SSHClient
from paramiko import AutoAddPolicy

ssh = SSHClient()
ssh.set_missing_host_key_policy(AutoAddPolicy())

host = 'тут мой хост'
port = 'тут мой порт'

username = 'логин'
password = 'пароль'

ssh.connect(host, port, username, password)
print("ok")

local_path = r'C:\Users\misterX\Desktop\Worker\primerSSH.txt'

remote_path = r'C:\Users\misterX\Desktop\eth'

    sftp = ssh.open_sftp()
    sftp.put(local_path, remote_path)
    sftp.close()

ssh.close()
Попробуйте этот вариант
 

misterX

Grey Team
01.06.2022
273
11
BIT
165
Python:
from paramiko import SSHClient
from paramiko import AutoAddPolicy

ssh = SSHClient()
ssh.set_missing_host_key_policy(AutoAddPolicy())

host = 'тут мой хост'
port = 'тут мой порт'

username = 'логин'
password = 'пароль'

ssh.connect(host, port, username, password)
print("ok")

local_path = r'C:\Users\misterX\Desktop\Worker\primerSSH.txt'

remote_path = r'C:\Users\misterX\Desktop\eth'

    sftp = ssh.open_sftp()
    sftp.put(local_path, remote_path)
    sftp.close()

ssh.close()
Попробуйте этот вариант
Ошибка компиляции
Syntax error in C:\Users\misterX\Desktop\Worker\SSH2.py
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\misterX\Desktop\Worker\SSH2.py", line 20
sftp = ssh.open_sftp()
IndentationError: unexpected indent
 

misterX

Grey Team
01.06.2022
273
11
BIT
165
Табуляцию то уберите)))
Так и ничего. Добавил в конец input() увидел что написано ок и окно снова само закрылось)) Странно это... Причём видно что какой то трафик идёт но файла нет, и брандмауэр выключен и порт открыт.
 
Последнее редактирование:

D3L1F3R

Red Team
20.02.2022
309
101
BIT
397
Так и ничего. Добавил в конец input() увидел что написано ок и окно снова само закрылось)) Странно это... Причём видно что какой то трафик идёт но файла нет, и брандмауэр выключен и порт открыт.
Попробуйте добавить
Python:
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.put(local_path, remote_path)
transport.close()
 
Мы в соцсетях:

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