Скрипт Python для подключения через SSH-туннель к базе данных MySQL в Namecheap

Я пытаюсь что-то, так как два дня гуглюсь и читаю форумы безуспешно.

У меня есть база данных MySQL, размещенная на Namecheap.com, к которой мне нужно получить доступ с моей локальной машины Linux через скрипт Python для создания таблиц и записей. Namecheap сказать "

"Удаленное соединение MySQL отключено на наших общих серверах по соображениям безопасности, но вы можете легко настроить SSH-туннель между вашим ПК и нашим сервером, используя SSH-клиент (например, Putty) с переадресацией порта MySQL (3306). После его завершения у вас будет порт 3306 на локальном компьютере, который будет прослушивать и перенаправлять на локальный хост вашего удаленного сервера через порт 3306. Таким образом, вы сможете эффективно подключаться к базе данных MySQL удаленного сервера, как если бы она работала на вашем локальном компьютере ".

И приведите пример, используя PuTTY

"Создайте сеанс в PuTTY, используя IP-адрес вашего сервера в качестве имени хоста и порта 21098"

Дело в том, что мне нужен мой скрипт Python, чтобы сделать это автоматически, без запроса пароля и т. Д.

Прочитал что-то о paramiko, но не понял, как SSH - это что-то новое для меня (кроме доступа к моей машине с Linux).

После ввода пароля я могу успешно войти вручную через командную строку в свою учетную запись хостинга, но это почти все, потому что тогда я не знаю, как запустить сценарий, который находится на моем компьютере.

ssh -p 21098 my_user_name@server137.web-hosting.com 

Редактировать:
Отлично, что-то, по крайней мере, сейчас происходит после очистки моего каталога python (оставшийся файл paramiko.py создал проблемы). Также внесены небольшие изменения в строке 2 вашего скрипта (ssh = SSHClient() ->> ssh = paramiko.SSHClient())

Затем сделал следующее:

ssh -p 21098 my_username@server137.web-hosting.com

авторизоваться на удаленном хосте и после успешного входа в систему ввести мой пароль

ssh-keygen -t rsa

создал ключ без пароля, который я потом восстановил через ftp, чтобы сохранить его в папке на моей локальной машине

/home/daniel/python_scripts/sshkey

вернуться к моей локальной машине, я запускаю ниже сценарий Python

#!/usr/bin/python
import paramiko

#clean the screen
os.system('clear')
myPkey = paramiko.RSAKey.from_private_key_file('/home/daniel/python_scripts/sshkey/key')
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #if you want to auto add the host RSA key
ssh.connect('server137.web-hosting.com', 21098, 'my_username', pkey=myPkey)

sys.exit()

но вот что я получил:

Traceback (most recent call last):
File "./my_vimeo.py", line 13, in <module>
ssh.connect('server137.web-hosting.com', 21098, 'my_username', pkey=myPkey)
File "/usr/local/lib/python2.7/dist-packages/paramiko/client.py", line 307, in connect
look_for_keys, gss_auth, gss_kex, gss_deleg_creds, gss_host)
File "/usr/local/lib/python2.7/dist-packages/paramiko/client.py", line 519, in _auth
raise saved_exception
paramiko.ssh_exception.AuthenticationException: Authentication failed.

'my_username', очевидно, не тот, который показан....

Как бы то ни было, есть кое-что, чего я не поняла и явно сделала неправильно.....

1 ответ

Paramiko действительно то, что вы ищете.

По сути, это SSH-клиент (например, PuTTY, например), который даже имеет поддержку TTY. По сути, вы бы использовали их класс SSHClient и вызовите метод подключения. Вы можете сделать это без пароля. Однако вам понадобится открытый ключ, который paramiko также поддерживает вместо пароля.

Итак, где-то вдоль линии, когда вы делаете ssh -p 21098 my_user_name@server137.web-hosting.comчто вы говорите на server137, проверьте открытый ключ в моем файле hostkeys, и, пожалуйста, убедитесь, что я могу подключиться.

Затем вы можете использовать открытый ключ:

import paramiko

myPkey = paramiko.RSAKey.from_private_key_file('<private_key_path_on_your_server>')
ssh = SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #if you want to auto add the host RSA key
ssh.connect('server137.web-hosting.com', 21098, 'my_user_name', pkey=myPkey

Вы можете увидеть, как настроить ваши ключи здесь: Соединение Paramiko SSH без пароля

Документация Paramiko для SSH Client здесь: Документация клиента Paramiko

Другие вопросы по тегам