通过脚本在现有连接上设置 SSH 隧道

通过脚本在现有连接上设置 SSH 隧道

我想在现有连接上建立 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

相关内容