Python脚本通过SSH隧道连接到namesheap的MySQL数据库

2024-09-27 21:32:00 发布

您现在位置:Python中文网/ 问答频道 /正文

两天来,我一直在尝试一些东西,搜索和阅读论坛都没有成功。在

我有一个MySQL数据库托管在名称便宜网我需要通过创建表和条目的Python脚本从本地linux机器访问它。 名字便宜说”

“出于安全原因,在我们的共享服务器上禁用了远程MySQL连接,但是您可以使用SSH客户端(例如Putty)和MySQL端口(3306)转发,轻松地在您的电脑和我们的服务器之间设置SSH隧道。完成后,您的本地机器上会有3306端口,监听并转发到3306端口上的远程服务器的本地主机。因此,您可以有效地连接到远程服务器的MySQL数据库,就好像它在本地机器上运行一样。”

举一个用腻子的例子

“使用服务器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公司())

然后执行以下操作:

^{pr2}$

登录到远程主机,并在成功登录后输入我的密码

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.

“我的用户名”显然不是显示的那个。。。。在

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


Tags: 端口keypy服务器脚本机器paramiko密码
1条回答
网友
1楼 · 发布于 2024-09-27 21:32:00

帕拉米科真的是你要找的。在

基本上,它是一个SSH客户机(比如PuTTY,比如….)甚至支持TTY。 实际上,您将使用它们的类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

相关问题 更多 >

    热门问题