paramiko: переадресация порта SSH для получения дампа SQL
Я пытаюсь использовать скрипт Python для получения дампа SQL с удаленного хоста с промежуточным хостом в качестве прокси-сервера, например так:
local machine -> proxy -> remote
Прокси должен быть там, потому что удаленный хост разрешает соединения только через этот прокси.
Примечание. Мне известен аналогичный вопрос в разделе Как подключиться к базе данных через туннель Paramiko (или аналогичный пакет), но решение, по-видимому, относится к PostgreSQL.
Я делаю соединение, используя SSH через paramiko. Я знаю, что forward.py является примером paramiko для переадресации портов, но я не уверен, правильно ли я его использую. Вот что я сделал (PX= прокси, RMT= удаленный):
forward.py --password --host=PX --port=PXport --user=PXusr RMT:RMTport
И я получаю этот результат:
*** Unable to open host keys file
*** Warning: no host key for PX
Connecting to ssh host PX:PXport ...
Now forwarding port 4000 to RMT:RMTport ...
Затем скрипт застревает на последней строке.
В1: Есть ли у кого-нибудь пример использования forward.py для подключения к удаленному хосту через прокси-сервер paramiko?
Q2: после того, как соединение установлено, возможно ли программно выполнять команды оболочки на удаленном хосте?
1 ответ
Я недавно написал SSHForwarder
класс, который делает то, что вы хотите:
https://gist.github.com/1399529
Чтобы использовать его, вы можете сделать что-то вроде этого:
try:
proxy_host = 'PX'
proxy_user = 'PXusr'
target_port = RMTport
target_host = 'RMT'
f = SSHForwarder(proxy_host, target_port, target_host, proxy_user)
# .... DO SOME STUFF ....
finally:
if f:
f.close()