所以基本上我有这个带有一堆文件的远程计算机。 我想运行unix命令(例如ls或cat)并在本地接收它们。
目前我通过python的套接字连接(我知道远程计算机的IP地址)。但是这样做:
data = None
message = "ls\n"
sock.send(message)
while not data:
data = sock.recv(1024) <- stalls here forever
...
没有给我任何东西。
答案 0 :(得分:1)
有一个优秀的Python库。它被称为Paramiko:http://www.paramiko.org/
Paramiko是一个SSH客户端,它允许您在运行sshd(包括许多标准服务器)的远程计算机上调用程序。
答案 1 :(得分:1)
您可以使用Python的subprocess
模块来完成您的任务。它是一个内置模块,没有太多依赖项。
对于您的问题,我建议使用Popen
方法,该方法在远程计算机上运行命令并将结果返回给您的计算机。
out = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
t = out.stdout.read() + out.stderr.read()
socket.send(t)
其中cmd
是您要执行的命令。
这会将命令的结果返回到您的屏幕。 希望有所帮助!!!
答案 2 :(得分:0)
这就是我为你的情况所做的。
在终端1中,我使用ncat nc
变体在套接字上设置了一个远程shell:
$ ncat -l -v 50007 -e /bin/bash
在终端2中,我用这个Python代码连接到套接字:
$ cat python-pass-unix-commands-socket.py
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('', 50007))
sock.send('ls\n')
data = sock.recv(1024)
print data
sock.close()
$ python pass-unix-commands-socket.py
这是我在运行命令后在终端1中得到的输出:
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Listening on :::50007
Ncat: Listening on 0.0.0.0:50007
Ncat: Connection from 127.0.0.1.
Ncat: Connection from 127.0.0.1:39507.
$
在终端2:
$ python pass-unix-commands-socket.py
alternating-characters.in
alternating-characters.rkt
angry-children.in
angry-children.rkt
angry-professor.in
angry-professor.rkt
$