python脚本 实现批量远程执行命令,传输文件功能

【Python】用Python和Paramiko实现远程服务器自动化管理 在现代IT环境中,远程服务器管理已成为运维工作的常态。随着自动化运维的需求不断增加,如何高效地管理远程服务器,提升操作的灵活性和效率,成为了运维人员的核心课题。本文将介绍如何使用Python的Paramiko库来实现远程服务器的管理与自动化脚本编写。文章将详细讲解Paramiko的安装与配置,如何通过SSH协议与远程服务器进行通信,以及如何编写自动化脚本来执行命令、传输文件、批量管理服务器等操作。通过大量的代码示例和详细解释,读者可以快速掌握如何使用Python进行远程管理,提升运维效率和可靠性。 阅读详情

python脚本 实现批量远程执行命令,传输文件功能

前言

由于一些不可抗力因素,公司生产上的机器封了ssh的端口,无可奈何只能自己写了一个python 程序来实现批量远程控制和传输文件脚本。

服务端(被远程操控端)

  • server.py 放在被控制的主机上 需要修改的地方为ip_pat中的正值表达式,默认是筛选本机的192开头的地址,可根据实际情况调整,端口默认为11115,日志默认打印在当前目录的server.log中

  • 执行方法

python server.py #前端运行
nohup python server.py & #后端运行
import socket
import time
import json
import struct
import subprocess
import os
import re
import datetime


def write_log(data, cmd=''):
    with open('server.log', 'a') as f2:
        now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        if cmd:
            f2.write(now + '\n' + json.dumps(data) + '\n' + cmd + '\n')
        else:
            f2.write(now + '\n' + json.dumps(data) + '\n')


def getip(patten):
    ip_text = subprocess.check_output(["ip", "a"])
    ip_search = re.search(patten, ip_text)
    return ip_search.groups()[0]


def return_cl(data):
    clientSocket.send((ip.center(30, '-') + "\n" + data))
    time.sleep(0.2)
    clientSocket.send('$end$')


def execute_cmd(cmd):
    write_log(head_dict, cmd)
    return_data = ''
    res = subprocess.Popen(
        cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True)
    nomal_text = res.stdout.read().rstrip()
    error_text = res.stderr.read().rstrip()
    if nomal_text:
        return_data += nomal_text
    if error_text:
        return_data += error_text
    return_cl(return_data)


def wirte_file(data, filename):
    write_log(head_dict)
    dir_path = os.path.dirname(filename)
    if not os.path.exists(dir_path):
        return_data = 'dir %s not exists' % dir_path
        return_cl(return_data)
        return False
    if os.path.isdir(filename):
        return_data = '%s is dir' % filename
        return_cl(return_data)
        return False
    try:
        with open(filename, 'wb') as f2:
            f2.write(data)
            return_cl('file %s transport successfully' % filename)
    except IOError:
        return_cl('Permission denied: wirte ' + filename)


if __name__ == '__main__':

    ip_pat = r"inet (192.[0-9\.]*?)/24 brd"
    ip = getip(ip_pat)

    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind((ip, 11115))

    print('server started')
    server.listen(1)
    fulldata = ''

    while True:
        clientSocket, clientAddress = server.accept()
        fulldata = ''
        head_len_byte = clientSocket.recv(1024)
        try:
            head_len = struct.unpack('i', head_len_byte)[0]
        except struct.error:
            write_log('bad request')
            clientSocket.close()
            continue
        head_dict = json.loads(clientSocket.recv(head_len))

        while True:
            data = clientSocket.recv(1024)
            if data == b'$end$':
                break
            else:
                fulldata += data

        if head_dict['type'] == 'cmd':
            execute_cmd(fulldata.decode('utf-8'))
        if head_dict['type'] == 'file':
            wirte_file(fulldata, head_dict['dest'])

客户端(操控端)

  • client.py 连接默认端口为11115,只需修改iplist即可
  • 执行方法
python client.py cmd '命令'  #操控远程主机执行命令,并返回结果
python client.py file 本地文件地址 远端文件地址
import socket
import sys
import os
import struct
from time import sleep
import json

promote = '''Useage :
python  (cmd 'context' | file 'context' 'dest_filename')
'''


def check_file(file_path):
    if not os.path.isfile(file_path):
        exit(file_path + ' not exists')
    return True


def check_params():
    params = [i.rstrip() for i in sys.argv[1:]]

    if len(params) == 2 and params[0] == 'cmd' or (
            len(params) == 3 and params[0] == 'file' and check_file(params[1])):
        send_data(params)
        exit()

    exit(promote)


def send_data(args):
    tran_dict = {
        'type': args[0]
    }
    if args[0] == 'cmd':
        data = args[1].encode('utf-8')

    if args[0] == 'file':
        tran_dict['dest'] = args[2]
        with open(args[1], 'rb') as f:
            data = f.read()

    head_info = json.dumps(tran_dict)
    head_info_len = struct.pack('i', len(head_info))

    socket.setdefaulttimeout(4)

    for ip in iplist.rstrip().split():
        try:
            sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sk.connect((ip, 11115))
            sk.send(head_info_len)
            sleep(0.2)
            sk.send(head_info.encode('utf-8'))
            sk.sendall(data)
            sleep(0.2)
            sk.send(b'$end$')

            res_data = ''
            while True:
                temdata = sk.recv(1024)
                if temdata == b'$end$':
                    break
                else:
                    res_data += temdata.decode('utf-8')
            print res_data
        except socket.timeout:
            print '%s connection time out'.center(30, '-') % ip
            continue
        except:
            print '%s is DOWN'.center(30, '-') % ip
            continue
        sk.close()


if __name__ == '__main__':
    iplist = '''192.168.58.128
    192.168.58.129
    '''
    check_params()
    exit()
python-实现远程windows机器上传文件和远程执行命令 python-实现远程windows机器上传文件和远程执行命令 1. python-实现远程windows机器上传文件和远程执行命令 编写上传测试文件 #!/usr/bin/env python3 # _*_ coding: utf-8 _*_ # Author:shichao # File: .py import json def test(): result = { ... 阅读详情

相关推荐

利用python的paramiko模块实现ssh远程命令执行+文件下载与上传

(1)paramiko是一个做远程控制的模块,用于ssh协议的实现。 (2)paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。 (3)paramiko可用于远程执行命令、文件下载及上传。 1.首先在pycharm中添加paramiko插件 2.ssh远程执行脚本 利用paramiko实现在远程主机上执行简单的hostname命令。 3.批量实现ssh远程执行脚本 import paramiko import sys def pl_ssh(

xy_的博客 1367

python实现批量远程电脑传输文件

通过Visual Studio Code软件,python实现远程电脑批量传输文件。可以实现远程电脑上传文件,远程电脑删除文件,远程电脑解压文件,远程电脑退出程序。(可以扩展的功能:只要是在远程电脑的终端的命令能实现的功能都可以扩展。)

qq_42327860的博客 2113

Python - Python 通过ssh 远程执行命令,上传下载文件

文章目录Python - Python 通过ssh 远程执行命令,上传下载文件1、引入模块2、执行远程命令3、上传和下载文件 Python - Python 通过ssh 远程执行命令,上传下载文件 1、引入模块 import paramiko from ssh import ssh_config 2、执行远程命令 import paramiko from ssh import ssh_config if __name__ == '__main__': # 创建SSH对象 ssh = p

简简单单Onlinezuozuo 1799

python传大文件如何检查遗漏_关于python的socket库超大文件传输问题

萌新正在学习socket编程,在本地(localhost)进行超大文件传输,比如说7G大的文件。我按照网上的例子和相关资料理解,写出来能正常运行,7g文件也能传。但有几个问题想请教一下。我用的是python的SocketServer写服务端,socket写客户端,传输方式用ftp,用stream流设置buffer_size为4096传输文件。我所理解是connect一瞬间,就是客户端和服务端建立了...

weixin_39721000的博客 202

基于滑动窗口的文件传输程序(Python)

包含3个文件 2个差不多的python文件 一份doc说明 计算机网络第一次作业

PDF批量加水印 与 去除水印实践

我们可以给PDF加图片水印或文字水印,要去除图片水印,一般只需要删除最后一个图片对象即可。要去除文字水印,需要保证主体内容和文字水印在/Contents中位于不同的对象内,这样我们只需要删除文字水印对应的对象即可删除水印。而对于主体内容和文字水印已经混合在一个对象时,本文的提供的方法则无能为力,需要进一步深入分析PDF细节。

小小明-代码实体的专栏 2759

基于python的大文件传输开源_UDP大文件传输工具库的Kamike.fast基本算法已经实现...

今天中午,利用休息时间,完成了这个UDP文件传输库的基本逻辑部分。这块的代码可以拿出去见人了,估计稍微调整一下,就能实际的传输大文件了。以后的修改将会在此基本思路的范围内扩展和测试。目前项目的状况是基本算法完成,但是缺乏测试用例的编写。不过UDP这种穿越NAT的测试,还需要多台无线路由器进行多层NAT的网络环境模拟,估计挺费时间。而且下周日我要去南京参加同事的婚礼,估计要完成到正式发布开源工具的水...

weixin_39647977的博客 431

AArch64 ARM64 寄存器介绍

除了上述通用寄存器,还有FPSR(浮点状态寄存器)和 FPCR(浮点控制寄存器)等。X29寄存器和X30寄存器在函数调用和堆栈帧的管理中扮演着关键角色。AArch64架构提供了31个通用寄存器,每个寄存器都可以用作64位X寄存器(X0~X30)或32位W寄存器(W0~W30)。使用X寄存器将导致64位的计算,使用W寄存器将导致32位的计算。EL0、EL1、EL2和EL3是AArch64架构中定义的四个特权级别(Exception Levels),用于支持不同的执行环境和特权级别。

lml435035844的博客 1万+

python并发与网络编程

python并发与网络编程 Linux 操作系统及其组成 1.操作系统的作用 ​ 操作系统 : 与硬件交互 ​ 应用程序 --> 请求调用操作系统功能 --> 硬件调用(cpu,内存) ​ 操作系统(OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需 要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系 统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。 2.Linux 操作系统组成 一个典型的 Linu

liuzhiqiang66的博客 708

Splunk CVE-2018-11409认证绕过漏洞深度解析

Splunk作为主流企业级日志分析平台,其Web管理接口的认证机制直接关系到整个安全运营体系的可信边界。CVE-2018-11409本质上是REST API路由层会话校验缺失引发的未授权访问问题,根源在于`/en-US/splunkd/__raw/`路径绕过了splunkweb与splunkd之间的信任链验证,导致配置文件、用户哈希、App源码等敏感信息明文泄露。该漏洞凸显了Web接口权限模型设计失守的风险,尤其在默认配置未加固、HTTPS未启用、初始密码未修改的生产环境中危害急剧放大。结合vulfocus

weixin_30875157的博客 599

告别标注地狱!YOLO+CLIP多模态零样本检测全实战:图文联合推理,想检测什么直接输文字,不用训模型

这套方案我给朋友的超市用了快3个月,运行极其稳定,临期商品的检测准确率能到96%,后续加了“货架空货检测”“通道杂物堆积检测”,都是改一行文本就搞定,完全不用重新开发,朋友说省了十几万的定制开发费用。很多做计算机视觉的朋友,总觉得目标检测必须标数据、训模型,其实不是的。现在多模态大模型的能力已经足够强,把YOLO的定位能力和CLIP的图文泛化能力结合起来,就能用极低的成本,搞定绝大多数定制化检测需求。对于我们开发者来说,技术的价值从来不是炫技,而是用最简单的方案,解决最实际的问题。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 516

python拷贝大文件_python实现p2p文件传输-适用大文件传输 - 运维之路

一、需求及应用场景考虑到我手上的服务器逐渐的增多,有时候需要大规模的部署同一个文件,例如因为方便使用systemtap这个工具定位问题,需要把手上几百台服务器同时安装kernel-debuginfo这个包,原有的方式采用一个源服务器,采用rsync或者scp之类的文件传输方式只能做到一个点往下分发这个文件,这个时候下发的速度就会比较的慢,基于以上原因,我写了一个基于bt协议传输文件的小工具,实际测...

weixin_39531037的博客 512

BES2300x笔记(36) -- OTA升级

哈喽大家好,这是该系列博文的第三十六篇~ 篇~ <<【系列博文索引】快速通道 >> 一、前言 BES 蓝牙方案自带 OTA(Over The Air)功能,该功能可以对蓝牙固件进行在线升级,目前该功能支持通过安卓手机(苹果手机也有对应APP,未实际测试)对蓝牙固件进行升级,以后还会支持通过 PC 端进行在线升级。在使用 OTA 功能之前,用户需安装 BES 提供的手机 apk 软件,将需要升级的固件拷贝到手机,然后通过该 apk 软件进行在线升级。

文化人的博客 5356

批量下执行命令,上传下载文件的脚本

 前言:     自己工作之余借助paramiko模块写了一个批量执行命令,上传下载文件的脚本,写的代码烂到哭,但最起码还能凑合着用吧。     使用环境是python2.6-2.7,其中要在当前目录下生成一个ssh_login.txt文件,它是用户保存登陆用户名和密码以及主机名的文件,格式如下: 主机名,端口,用户名,验证方式是公私钥认证还是密码验证,密码, #每行以逗号结尾,不允许...

weixin_34111819的博客 246

Open3D 实现CSF布料模拟算法【2025最新版】

CSF布料模拟算法在open3d模块下的实现,博客长期更新,本文最近更新时间为:2025年1月16日。。

点云侠的博客 5746

光学传播仿真软件:ASAP_(1).ASAP软件介绍与安装

ASAP(Advanced System for Analysis and Propagation)是一款强大的光学传播仿真软件,广泛应用于光学系统的设计、分析和优化。它提供了丰富的建模工具和仿真功能,可以帮助用户从简单的光学元件到复杂的光学系统进行仿真。:支持光学、机械、热学等多物理场的联合仿真。:采用高精度的算法,确保仿真结果的准确性。:内置了大量的光学元件,如透镜、反射镜、棱镜、光栅等。:提供直观的用户界面,支持多种建模和仿真方式。:支持使用脚本语言进行二次开发,增强软件的定制能力。

kkchenjj的博客 1593

Python 之远程复制文件及调用远程命令脚本

#!/usr/bin/envpython #-*-coding:UTF-8-*- """ @Item:v1.0 @Author:ShengWangQiang @Group:System @Date:2015-01-28 @E-mail:swq.499809608@hotmail.com @Funtion: """...

weixin_34235135的博客 201

C# USB通信实现

在C#中,我们可以利用.NET框架提供的类库和API来实现与USB设备的通信。本文将介绍如何使用C#进行USB通信,并提供相应的代码示例。以上就是使用C#进行USB通信的基本过程。通过以上代码示例,你可以实现与USB设备的简单通信,具体的实现方式和细节根据你的实际需求进行调整和扩展。命名空间,该命名空间包含了与串口通信相关的类和方法。选择需要通信的USB设备,然后使用。步骤二:获取可用的USB设备列表。首先,在你的C#项目中引入。步骤三:打开USB端口。步骤六:关闭USB端口。步骤一:引入命名空间。

PixelProX的博客 4383

python远程执行shell脚本文件_python之实现批量远程执行命令(堡垒机)

python远程批量执行我并不是一个专业的开发,我一直在学习linux运维,对于python也是接触不久,所以代码写的并不是很规范简洁。前段时间一个同学找我一起做一个自动化运维平台,我对python的django还没有了解,并且对于HTML和JS这类开发学习还没有涉及,所以我说我做些后台的实现,前端就交给我的同学做。不扯淡了,下面说下我做批量执行的思路。用到的模块:paramiko功能:很简单就是...

weixin_39754142的博客 869

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

python之实现批量远程执行命令(堡垒机)

python远程批量执行 用到的模块:paramiko 功能:很简单就是批量执行命令,类似于ansible,本来想用Fabric,但是想一想还是用paramiko,因为我在学习ansible,ansible里面就有paramiko。后期还要将配置文件里面的主机组放到数据库里面。这里我想使用的mongodb,因为我的主机配置文件写的是字典的形式,保存在文档数据库中更为方便些。 ...

weixin_30732825的博客 800

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

python实现批量远程执行命令及批量上传下载文件

python实现批量远程执行命令及批量上传下载文件 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/1/22 23:18 # @Author : xuxuedong ...

a18073359319的博客 282

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

python远程执行shell脚本文件_Python远程linux执行命令

1、远程登录到linux上,使用到的模块paramiko#远程登陆操作系统def ssh(sys_ip,username,password,cmds):try#创建ssh客户端client = paramiko.SSHClient()#第一次ssh远程时会提示输入yes或者noclient.set_missing_host_key_policy(paramiko.AutoAddPolicy())#...

weixin_39649478的博客 1489

python常用脚本命令_python实用脚本分享--ssh远程批量执行命令,值得收藏

概述今天主要分享一个批量执行命令的脚本,支持直接执行ssh命令及文件传输,支持多线程,下面一起来看看吧!实用脚本脚本内容:#!/usr/bin/python#coding:utf-8import paramikoimport sysimport datetimeimport threadingimport Queueimport getopt​def usage():​print """​-h,-...

weixin_39899630的博客 356

python传文件给堡垒机上远程的另一个机器_Python paramiko模块 实现 ssh远程执行命令 上传下载文件 堡垒机模式下的远程命令执行...

使用密码远程执行命令[root@localhostscript]#catdaramiko_ssh.py#!/usr/bin/envpython#_*_coding:utf-8_*___author__='gaogd''''执行远程命令ssh命令如同ssh-p22root@192.168.10.12'cmd''''importparamikossh=paramiko.SS...

weixin_39723655的博客 594

linux执行python文件_Python远程linux执行命令实现

1、远程登录到linux上,使用到的模块paramiko#远程登陆操作系统def ssh(sys_ip,username,password,cmds):try#创建ssh客户端client = paramiko.SSHClient()#第一次ssh远程时会提示输入yes或者noclient.set_missing_host_key_policy(paramiko.AutoAddPolicy())#...

weixin_39570530的博客 222
上一篇: docker-compose搭建rap2
下一篇: python脚本批量检测端口连通性
EHOIST
博客等级 码龄8年 5粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值