使用 Socket 执行远程命令

编写一个程序,实现客户端能在服务端远程执行命令,并把命令结果在客户端打印出来

服务端:192.168.5.131
客户端:192.168.5.134

[[email protected] ~]# cat client.py
#!/usr/bin/env python
#-*- coding:utf-8 -*-

import sys
import tab        # tab模块用于让客户端支持命令tab补齐,需要自己编写该模块,参考:tab.py
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((‘192.168.5.131‘, 1234))

while True:
    cmd = raw_input(‘Please input command: ‘).strip()
    if cmd == ‘exit‘ or cmd == ‘quit‘:
        sys.exit()
    if cmd:
        s.sendall(cmd)
        data = s.recv(1024)
        print data

s.close()
[[email protected] ~]# cat server.py
#!/usr/bin/env python
#-*- coding: utf8 -*-

import socket
from subprocess import Popen, PIPE

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((‘192.168.5.131‘, 1234))
s.listen(5)
connect, address = s.accept()

while True:
    cmd = connect.recv(1024)
    p = Popen(cmd, stdout=PIPE, stderr=PIPE)
    stdout = p.stdout.read()
    stderr = p.stderr.read()
    if stdout:
        connect.sendall(stdout)
    elif stderr:
        connect.sendall(stderr)

s.close()

先运行 server.py ,然后在客户端执行远程命令:

[[email protected] ~]# python client.py
Please input command: ls
anaconda-ks.cfg
client.py
install.log
install.log.syslog
server.py

Please input command: df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda3       20338948 1352204  17953580   8% /
tmpfs             767420       0    767420   0% /dev/shm
/dev/sda1          99150   27809     66221  30% /boot

Please input command: exit

原文地址:https://www.cnblogs.com/pzk7788/p/8148698.html

时间: 2024-11-09 22:19:18

使用 Socket 执行远程命令的相关文章

L15.4 zabbix 自定义执行远程命令与分级报警示例

 zabbix 自定义执行远程命令与分级报警示例 详细选项说明参考之前内容,这里只演示操作过程. 注意事项: operation send message Media Type Email, SMS, Jabber, Script, EZ Texting User remote command (1) 给zabbix定义sudo规则: zabbix ALL=(ALL) ALL (2) 不支持active模式的agent: (3) 不支持代理模式: (4) 命令长度不得超过255个字符: (5)

zabbix action 执行远程命令

今天没事,想研究一下zabbix action执行远程命令,弄了一上午,终于好了.现记录一下,供以后再出现类似问题可以参考.. 首先,我要监控的服务是nginx/mysqld,在要监控的客户端上开启远程执行命令, EnableRemoteCommands=1 然后在客户端上添加权限 命令#visudo 在最后添加 # allows 'zabbix' user to run all commands without password. zabbix ALL=NOPASSWD: ALL #  # a

Zabbix报警执行远程命令

日常Zabbix报警案例中,大多都是报警发送邮件,场景里很少有需要报警后执行一个命令(启动服务.清空磁盘空间.关停服务器):而今天就给大家讲讲最近需要做的事:报警后执行远程命令 首先讲讲需求吧,  遥远的一天,小伙伴们用上了mongodb,而且需要大力使用,日后一些数据存储在mongodb:从生产环境迁移数据进mongodb,那么问题来了,经常听到别人说,mongodb量大就挂了.mongodb有些数据是在程序当中被引用到,白天某个时刻挂了,那么用户.客服.运营就呼唤着了..团队中也在查问题,找

Zabbix配置动作执行远程命令和发送邮件

当有事件发生,我们可以根据事件来执行相应的动作,根据事件来源可以分为触发器动作,自动发现动作,自动注册动作,内部事件动作,自动发现动作在之前的自动发现那里讲过了,这里介绍一下触发器动作,当触发器事件达到执行动作的必要条件,会执行相应的动作 1.配置邮件告警动作 首先创建一个触发器动作,触发报警会发送邮件定义动作触发条件定义动作执行的操作,这里是执行发送消息的操作,步骤1-5表示会发送5次消息,默认每次的间隔是30分钟这里我们定义了1-5步执行的操作,就是每隔30分钟,将消息通过'zabbix_s

Zabbix去执行远程命令

远程命令是一个很棒的功能,试想一下,你正在与甜美娇羞的小娘子兴奋的啪啪啪,突然短信来了,提示服务器里存储空间不够用,你还要翻身下床摸索出笔记本来把这些问题处理掉,处理完毕之后又要重新酝酿情绪,太扫兴了!其实这种一两个命令就能搞定的问题就应该交给Zabbix自己去解决. 我们这里就举一个"监控文件大小"的例子:假设我们把/mnt这个文件夹挂载到数据盘上,如果数据盘存储空间不够用,就要求zabbix远程自动删除一些过期的日志文件,只保留一天以内的日志文件. 于是乎,我们先写一个脚本,名字叫

zabbix执行远程命令

Remote command 最大的好处是什么呢? 是自动.  Zabbix会根据配置的条件,去执行对应的命令,下面看看Remote command的应用场景. 应用无法响应时,自动重启某些应用. 当服务器不响应时,使用IPMI的"reboot"命令重启服务器. 在磁盘要满了的情况下,自动删除一些文件(比如/tmp). 根据CPU负载,自动进行虚拟机调配. 弹性计算,根据系统情况,新增或删除云节点. Zabbix无法通过Zabbix Proxy向Zabbix Agent发送,一定要从Z

Zabbix远程命令执行失败

前言 问题 : 手机上收到tomcat server[80] down信息,服务down掉,往往都是有重启操作.重启失败才会报警.如果重启操作执行了,我们就需要查看为何不能启动? Trigger: Tomcat service[80]is down Trigger status: PROBLEM Trigger severity: Disaster Trigger URL: Item values: 1. Tomcat status (192.168.96.200:net.tcp.listen[

zabbix——远程命令

实验目的: 使用zabbix监控httpd是否正常工作,具体通过监测80端口是否开启 如果httpd没有正常工作,zabbix执行远程命令,重启httpd服务   一.准备工作: 在agent端执行 vim /etc/zabbix/zabbix_agentd.conf //配置agent,允许执行远程命令   service zabbix-agent restart //重启服务生效   cat /etc/sudoers | grep requiretty //查看sudo配置是否要求用户登录t

paramiko模块实现批量执行远程主机命令

1.配置文件host.conf [webserver] host1=192.168.1.10,root,123456,22 host2=192.168.1.11,root,123456,22 [dbserver] db1=192.168.1.12,root,123456,22 db2=192.168.1.13,root,123456,22 2.ssh远程命令脚本ssh.py #!/usr/bin/python # --*-- coding: utf-8 --*-- import paramiko