0

我正在尝试创建 ssh 反向隧道。当我在终端上运行以下命令时,效果会更好:

autossh -M 10876 -N -f -o PubkeyAuthentication=yes -o PasswordAuthentication=no -i /root/.ssh/id_rsa -R 6666:localhost:22 root@**.**.**.** -p 2233

但是当我在 python 中运行它os.system()或使用subprocess它时它不起作用。当我检查进程列表时,进程已创建并正在运行,与最后一种方法没有区别。(直接在终端中运行)

蟒蛇代码:

command ='autossh -M 10876 -N -f -o PubkeyAuthentication=yes -o PasswordAuthentication=no -i /root/.ssh/id_rsa -R 6666:localhost:22 root@**.**.**.** -p 2233'
proc = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE, shell=True)

知道有什么问题吗?

4

2 回答 2

2

当您使用 时shell=True,您不想shlex.split()在命令参数上使用...它应该只是一个字符串。

由于您将 argsPopen作为序列传递,因此第一个 arg ( autossh) 用作命令,其余的 args 实际上传递给shell,而不是 to autossh

所以...您可以删除shell=True,或者通过删除使用 . 将 args 作为字符串传递shlex.split()

https://docs.python.org/2/library/subprocess.html#subprocess.Popen

于 2015-12-13T14:04:19.807 回答
0

它适用于 Windows10(cygwin 中的 autossh,Python 3.6) port = 6379; command = f'autossh -M 1{port} -N -f -C -L {port}:localhost:{port} root@acone2'; proc = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE, shell=True)

于 2019-12-24T06:28:32.830 回答