我想在现有连接上建立 SSH 隧道。棘手的部分是通过脚本执行此操作(我需要一个自定义 shell,只允许用户执行某些特定操作,例如设置此隧道)。
通常你可以这样做:
<enter>
~C
ssh> -L 8080:localhost:80
但我需要能够通过正在运行的 python 脚本来做到这一点。我试过:
print("\n~C -L 8080:localhost:80")
但不幸的是这个想法太简单了。
那么,如何从正在运行的 Python 脚本设置隧道?
(作为一个附带问题,我还必须阻止ssh -N -L x:host:y host.example.com
,但仍然允许使用我的自定义 shell 设置端口转发)。
答案1
尝试使用sshtunnel
库。
例子:
from sshtunnel import SSHTunnelForwarder
from time import sleep
with SSHTunnelForwarder(
('localhost', 2222),
ssh_username="vagrant",
ssh_password="vagrant",
remote_bind_address=('127.0.0.1', 3306)) as server:
print(server.local_bind_port)
while True:
# press Ctrl-C for stopping
sleep(1)
print('FINISH!')
或 CLI:
python -m sshtunnel -U vagrant -P vagrant -L :3306 -R 127.0.0.1:3306 -p 2222 localhost