如何使用python

时间:2016-04-21 07:04:03

标签: python

所以基本上我有这个带有一堆文件的远程计算机。 我想运行unix命令(例如ls或cat)并在本地接收它们。

目前我通过python的套接字连接(我知道远程计算机的IP地址)。但是这样做:

data = None
message = "ls\n"
sock.send(message)
while not data:
    data = sock.recv(1024) <- stalls here forever
    ...

没有给我任何东西。

3 个答案:

答案 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
$