我正在编写一个使用ssh隧道访问远程Mysql数据库的Python应用程序。 我用
设置了隧道os.system("ssh -fNg -L 3306:127.0.0.1:3306 username@host")
一切都很完美。问题是:
关闭ssh隧道的python代码是什么?
由于
答案 0 :(得分:3)
创建隧道的过程仍然在后台运行
>>> command = 'ssh -fNg vagrant@localhost -p2222 -L 8000:localhost:8000'
>>> os.system(command)
>>> os.system('exit')
ps -A | grep ssh
7144 ?? 0:00.04 ssh -fNg vagrant@localhost -p2222 -L 8000:localhost:8000
这表明进程仍在运行且隧道仍在工作,os.system
不返回进程ID,因此我们可以使用它来终止进程(它返回退出代码)
import subprocess
proc = subprocess.Popen(command, shell=True)
proc.terminate() # this terminates the process
答案 1 :(得分:0)
def close(self, tunnel = None):
if tunnel is not None:
# close tunnel connection.
tunnel.close()
def connect(params):
# Create an SSH tunnel
tunnel = SSHTunnelForwarder(
(params['ssh_ip_address'], int(params['ssh_port'])),
ssh_username=params['ssh_username'],
ssh_private_key=params['ssh_key'],
ssh_private_key_password=params['ssh_key_file_password'],
remote_bind_address=('localhost', int(params['ssh_remote_forward_port'])),
local_bind_address=('localhost',int(params['ssh_local_forward_port']))
tunnel.start()
return tunnel