我真的試圖做停止阻塞進程。這個netcat應該監聽傳入的TCP連接。有可能沒有人想連接到遠程主機,所以netcat進程必須被終止。如何使用SSH作爲子
我的第一個想法是在遠程主機上使用nc
進程的PID並執行簡單的kill [PID]
命令。但我無法從遠程主機上的nc
進程獲取進程ID。
我到目前爲止所嘗試的是使用paramiko
和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終端和的netcat進程的PID對sshpass
方式返回。但在Python腳本中嘗試這兩種方法的結果相同:整個腳本被阻塞而不是返回PID。如果我不嘗試讀取輸出 - 這意味着要刪除stdout.readlines()
或sshProcess.stdout.read()
- 腳本未被阻止,但我也沒有在遠程主機上獲得netcat進程的PID。
我正在使用Linux機器,遠程主機也運行Linux。
[fabric](http://fabfile.org)可能會提供比paramiko更高級別的界面,通過Python中的ssh運行命令。 – jfs