【问题标题】:Python script to connect via SSH tunnel to MySQL database at Namecheap通过 SSH 隧道连接到 Namecheap 的 MySQL 数据库的 Python 脚本
【发布时间】:2015-05-15 10:58:21
【问题描述】:

自从两天谷歌搜索和阅读论坛以来,我一直在尝试一些事情,但没有任何成功。

我有一个托管在 Namecheap.com 上的 MySQL 数据库,我需要通过 Python 脚本从本地 linux 机器访问该数据库,以创建表和条目。 名不虚传”

“由于安全原因,远程 MySQL 连接在我们的共享服务器上被禁用,但您可以使用带有 MySQL 端口 (3306 ) 转发。完成后,您将在本地计算机上使用端口 3306 侦听并转发到端口 3306 上的远程服务器的本地主机。因此,您可以有效地连接到远程服务器的 MySQL 数据库,就好像它在本地机器上运行一样。"

并举一个使用 PuTTY 的例子

“使用您的服务器 IP 地址作为主机名和端口 21098 在 PuTTY 中创建会话”

关键是我需要我的 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' 显然不是如图所示......

不管怎样,有些事情我不明白而且显然做错了.....

【问题讨论】:

    标签: python mysql linux ssh ssh-tunnel


    【解决方案1】:

    Paramiko 确实是您想要的。

    基本上,它是一个甚至支持 TTY 的 SSH 客户端(比如 PuTTY,其中之一..)。 本质上,您将使用他们的类SSHClient 并调用connect 方法。您可以在没有密码的情况下执行此操作。但是,您将需要一个公钥,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 connection without password

    这里的 SSHClient 的 Paramiko 文档:Paramiko Client docs

    【讨论】:

      猜你喜欢
      • 2014-09-17
      • 2014-07-20
      • 2014-03-21
      • 1970-01-01
      • 2011-02-17
      • 2013-04-05
      • 2016-04-18
      相关资源
      最近更新 更多