Туннелирование SSH работает на терминале, но не на Python? - PullRequest
0 голосов
/ 21 октября 2019

Я попытался выполнить SSH-туннелирование на сервер с моего компьютерного терминала с помощью следующего кода.

ssh -L 3306:192.168.0.xx:41xx -p 2220 root@xxx.85.63.xxx

Затем я получил доступ к базе данных внутри (MySQL) с помощью следующей команды.

mysql -u username -h 192.168.0.xx -P 41xx -p

И это сработало. Но когда я попытался выполнить это с помощью Python, я не смог заставить его работать. Я всегда получаю следующее сообщение об ошибке:

OperationalError: (1045, "Access denied for user 'username'@'localhost' (using password: YES)")

Мой код до сих пор, как показано ниже.

from sshtunnel import SSHTunnelForwarder

with SSHTunnelForwarder(
         ('xxx.85.63.xxx', 2220),
         ssh_password="psswd",
         ssh_username="root",
         remote_bind_address=('192.168.0.xx', 41xx)) as server:

    conn = MySQLdb.connect(host='localhost',
                           port=server.local_bind_port,
                           user='username',
                           passwd='passwd',
                           db='dbname')

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

Честно говоря, я не очень знаком с SSH или SSH-туннелированием, поэтому я в значительной степени потерян здесь. Может кто-нибудь указать, что я должен делать, пожалуйста? заранее спасибо.

1 Ответ

0 голосов
/ 21 октября 2019

Я полагаю, что вы правильно настроили переадресацию портов.

Это проблема с правами доступа MySQL, которая обозначена как «Отказано в доступе».

MySQL назначает разрешения на основе пользователя @хост. Вы подключаетесь как username @ localhost, в то время как пользователь, вероятно, настроен только как username@192.168.0.xx.

Чтобы узнать, прав ли я, try mysql -u username -h localhost -P 41xx -p, когда вы вошли на хост SSH. Я думаю, что это может вас не впустить.

Я бы посмотрел с привилегиями SHOW GRANTS FOR 'username'@'localhost'; и GRANT на username @ localhost или username @% или снял бы ограничивающие разрешения.

Удачи.

...