私が実際にやろうとしたこと:
Python スクリプトを使用して、nc
SSH を使用してリモート ホストで (netcat) を開始します。この netcat は、着信 TCP 接続をリッスンする必要があります。誰もリモート ホストに接続したくない可能性があるため、netcat プロセスを強制終了する必要があります。
nc
私の最初のアイデアは、リモート ホスト上のプロセスの PID を使用して、単純なkill [PID]
コマンドを実行することでした。nc
しかし、リモート ホスト上のプロセスからプロセス ID を取得できませんでした。
私がこれまでに試したことは、paramiko
andを使用することでしsshpass
た。
私のparamiko
コード:
import os, sys, paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, username=user, password=password)
stdin, stdout, stderr = ssh.exec_command("nc -l -p"+port+"&")
print stdout.readlines()
使用sshpass
:
sshProcess = subprocess.Popen(["sshpass", "-p", password, "ssh", user+"@"+hostaddress, "nc", "-l", "-p", str(destPort),"&"], stdout=subprocess.PIPE, stdin=None)
print sshProcess.stdout.read()
通常のLinux端末でアプローチを試みたところsshpass
、netcatプロセスのpidが返ってきました。しかし、Python スクリプトで両方のアプローチを試しても同じ結果になりました。PID を返す代わりに、スクリプト全体がブロックされました。出力を読み取ろうとしない場合 (つまり、stdout.readlines()
またはを削除することを意味しますsshProcess.stdout.read()
)、スクリプトはブロックされませんが、リモート ホスト上の netcat プロセスの PID も取得できません。
Linux マシンで作業しており、リモート ホストも Linux を実行しています。