Python 如何使用SSH隧道在远程服务器上执行代码?
我正在使用SSH隧道更新远程服务器上的数据库。关于这一点,我有一些疑问 下面是ssh隧道的示例代码Python 如何使用SSH隧道在远程服务器上执行代码?,python,Python,我正在使用SSH隧道更新远程服务器上的数据库。关于这一点,我有一些疑问 下面是ssh隧道的示例代码 import mysql.connector import sshtunnel sshtunnel.SSH_TIMEOUT = 5.0 sshtunnel.TUNNEL_TIMEOUT = 5.0 with sshtunnel.SSHTunnelForwarder( ('ssh.pythonanywhere.com'), ssh_username='your PythonAny
import mysql.connector
import sshtunnel
sshtunnel.SSH_TIMEOUT = 5.0
sshtunnel.TUNNEL_TIMEOUT = 5.0
with sshtunnel.SSHTunnelForwarder(
('ssh.pythonanywhere.com'),
ssh_username='your PythonAnywhere username', ssh_password='the password you use to log in to the PythonAnywhere website',
remote_bind_address=('your PythonAnywhere database hostname, eg. yourusername.mysql.pythonanywhere-services.com', 3306)
) as tunnel:
connection = mysql.connector.connect(
user='your PythonAnywhere username', password='your PythonAnywhere database password',
host='127.0.0.1', port=tunnel.local_bind_port,
database='your database name, eg yourusername$mydatabase',
)
# Do stuff
connection.close()
SSH隧道(这里是dostuff)中的所有代码都是在远程服务器上执行的吗?
如果我在SSH隧道之外的计算机上处理一些数据,这些数据是否通过SSH隧道传递到远程服务器
我有一个工作的例子,但我的很多东西都被黑客攻击了。只需要确认一下 希望这是一些帮助 一点背景-我做了一些类似于您的用例的工作。但是我首选的ssh隧道是
paramiko
。下面是一个如何工作的示例
有大量的paramiko API文档,您可以在以下网址找到:
我使用以下方法在受密码保护的客户端上执行命令:
import paramiko
import sys
nbytes = 4096
hostname = 'hostname'
port = 22
username = 'username'
password = 'password'
command = 'ls'
client = paramiko.Transport((hostname, port))
client.connect(username=username, password=password)
stdout_data = []
stderr_data = []
session = client.open_channel(kind='session')
session.exec_command(command)
while True:
if session.recv_ready():
stdout_data.append(session.recv(nbytes))
if session.recv_stderr_ready():
stderr_data.append(session.recv_stderr(nbytes))
if session.exit_status_ready():
break
print 'exit status: ', session.recv_exit_status()
print ''.join(stdout_data)
print ''.join(stderr_data)
session.close()
client.close()
我的答案基于帕拉米科的经验
会话的命令,如session.exec_命令(command)
。我相信在您的情况下,您需要将其传递到隧道
mysql.connector.connect
可以直接使用ssh,然后连接到数据库