Я пишу код Python для удаленных хостов SSH или Telnet, выполняю некоторые команды и получаю результат. Здесь у нас есть сервер перехода, поэтому код должен быть «связан» с этим сервером и от него, через Telnet или SSH к удаленным узлам.
Все мои подходы отлично работают на сервере переходов, например, я могу получить вывод команд внутри него. Проблема в том, когда я пытаюсь удаленно подключиться к хостам с него.
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('IP', 22, username = "user", password = "pass")
stdin, stdout, stderr = client.exec_command("command")
for line in stdout:
print('... ' + line.strip('\n'))
client.close()
Использование библиотеки jumpssh дает те же результаты, и я не могу подключаться к хостам Telnet. Я попробовал следующий подход, но получил ошибку
Administratively prohibited.
from jumpssh import SSHSession
gateway_session = SSHSession('jumpserver','user', password='pass').open()
remote_session = gateway_session.get_remote_session('IP',password='pass')
print(gateway_session.get_cmd_output('command'))
В последней компании, с которой я работал, у нас была лицензия от клиента SSH, который поддерживает сценарии Python, и мы отлично работали в более «текстовой» обработке.
Есть ли способ выполнить ту же задачу изначально в Python?
SSHSession
пытается открыть канал переадресации порта direct-tcpip
через gateway_session
.
«административно запрещено» - это сообщение сервера OpenSSH sshd
, указывающее, что переадресация порта direct-tcpip
отключена.
Чтобы включить переадресацию портов, установите соответствующие директивы AllowTcpForwarding
и DisableForwarding
в sshd_config
.
Если вы не можете включить переадресацию портов на сервере, вы не можете использовать библиотеку jumpssh.
Если у вас есть доступ к серверу через оболочку, вы можете вместо этого использовать подход, подобный ProxyCommand
.
См. Paramiko: вложить сеанс ssh на другой компьютер с сохранением функциональности paramiko (ProxyCommand).
Хорошо, вам нужно это: Передача входных данных / переменных в команду / скрипт через SSH с использованием Python Paramiko.
Теперь я обнаружил, что делал не так, канал закрывался после команды. Я следил за этим потоком stackoverflow.com/questions/42943385/… и работаю. Спасибо за помощь!