2012-09-18 43 views
1

我真的試圖做停止阻塞進程。這個netcat應該監聽傳入的TCP連接。有可能沒有人想連接到遠程主機,所以netcat進程必須被終止。如何使用SSH作爲子

我的第一個想法是在遠程主機上使用nc進程的PID並執行簡單的kill [PID]命令。但我無法從遠程主機上的nc進程獲取進程ID。

我到目前爲止所嘗試的是使用paramikosshpass

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。

+0

[fabric](http://fabfile.org)可能會提供比paramiko更高級別的界面,通過Python中的ssh運行命令。 – jfs

回答