我实际上尝试做的事情:
使用 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。