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()...それは単なる文字列でなければなりません。

args をPopenシーケンスとして に渡すので、最初の arg( ) がコマンドとして使用され、残りの args は実際にはではなくshellautosshに渡されます。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 に答える