python自动化运维 通过paramiko库和time库实现服务器自动化管理

目录

一.前言 

二. 代码实现以及解析 

2.1导入必要的库 

2.2定义服务器信息 

2.3创建 SSH 客户端连接函数 

2.4执行远程命令函数 

2.5获取系统信息函数 

2.6重启服务函数

2.7 主函数

三.致谢


一.前言 

在数字化时代,IT 基础设施的规模和复杂性不断增长,传统的手动管理方法已不再适用。自动化运维,作为 IT 运维管理的新范式,正变得越来越重要。它不仅能够显著提升运维效率,降低人为错误,还能确保业务连续性和系统的高可用性。

Python,以其简洁的语法和强大的功能,成为自动化运维的优选语言。借助 Python,我们可以快速开发出灵活且强大的自动化脚本,以应对各种运维场景。

在本文中,我们将探讨如何使用 Python 的 paramiko 库来实现 SSH 连接和远程命令执行,以及如何利用 time 库来处理时间相关操作,从而实现服务器的自动化管理。这些库的结合使用将使我们能够编写出功能丰富、健壮且易于维护的自动化脚本。


 


二. 代码实现以及解析 

import paramiko
import time# 定义服务器信息
hostname = 'your_server_hostname_or_ip'
port = 22
username = 'your_username'
password = 'your_password'# 创建 SSH 客户端连接
def connect_to_server():ssh_client = paramiko.SSHClient()ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())try:ssh_client.connect(hostname, port, username, password)print(f"Connected to {hostname} successfully.")return ssh_clientexcept Exception as e:print(f"Error connecting to {hostname}: {str(e)}")return None# 执行远程命令
def run_command(ssh_client, command):stdin, stdout, stderr = ssh_client.exec_command(command)output = stdout.read().decode('utf-8')error = stderr.read().decode('utf-8')if error:print(f"Error executing command '{command}': {error.strip()}")else:print(f"Command '{command}' executed successfully. Output:\n{output.strip()}")# 获取系统信息示例
def get_system_info(ssh_client):run_command(ssh_client, 'uname -a')run_command(ssh_client, 'df -h')run_command(ssh_client, 'free -m')# 重启服务示例
def restart_service(ssh_client, service_name):run_command(ssh_client, f'sudo systemctl restart {service_name}')time.sleep(5)  # 等待一段时间以确保服务重启完成run_command(ssh_client, f'sudo systemctl status {service_name}')# 主函数
def main():ssh_client = connect_to_server()if ssh_client:get_system_info(ssh_client)restart_service(ssh_client, 'apache2')  # 以 Apache2 为例,可以根据需要替换成你的服务名ssh_client.close()print("Script execution completed.")else:print("Exiting script due to connection error.")if __name__ == "__main__":main()

2.1导入必要的库 
 
import paramiko
import time
  • paramiko 是一个用于 SSH2 协议的 Python 库,用于远程操作服务器。
  • time 是 Python 标准库,用于在执行操作之间添加延迟,如等待服务重启完成。

 


2.2定义服务器信息 
 
hostname = 'your_server_hostname_or_ip'
port = 22
username = 'your_username'
password = 'your_password'
  • 这些变量包括远程服务器的主机名(或IP地址)、SSH端口号、登录用户名和密码。实际应用中,密码应该通过安全的方式进行管理,如使用环境变量或密钥认证。
     
2.3创建 SSH 客户端连接函数 

 
def connect_to_server():ssh_client = paramiko.SSHClient()ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())try:ssh_client.connect(hostname, port, username, password)print(f"Connected to {hostname} successfully.")return ssh_clientexcept Exception as e:print(f"Error connecting to {hostname}: {str(e)}")return None
  • connect_to_server() 函数通过 paramiko.SSHClient() 创建一个 SSH 客户端对象。
  • set_missing_host_key_policy(paramiko.AutoAddPolicy()) 设置自动添加新主机密钥的策略,适用于首次连接服务器时。
  • ssh_client.connect() 方法尝试连接远程服务器,并打印连接成功或失败的信息。

 

2.4执行远程命令函数 

 
def run_command(ssh_client, command):stdin, stdout, stderr = ssh_client.exec_command(command)output = stdout.read().decode('utf-8')error = stderr.read().decode('utf-8')if error:print(f"Error executing command '{command}': {error.strip()}")else:print(f"Command '{command}' executed successfully. Output:\n{output.strip()}")
  • run_command() 函数接收一个 SSH 客户端对象 ssh_client 和要执行的命令 command
  • 使用 exec_command() 方法在远程服务器上执行命令,并获取标准输入、输出和错误流。
  • 输出结果进行解码(通常为UTF-8),并根据执行情况打印成功或失败的信息。

 

2.5获取系统信息函数 
def get_system_info(ssh_client):run_command(ssh_client, 'uname -a')run_command(ssh_client, 'df -h')run_command(ssh_client, 'free -m')
  • get_system_info() 函数调用 run_command() 函数来获取系统信息:
    • uname -a:获取操作系统的详细信息。
    • df -h:获取磁盘空间使用情况。
    • free -m:获取内存使用情况。
2.6重启服务函数
def restart_service(ssh_client, service_name):run_command(ssh_client, f'sudo systemctl restart {service_name}')time.sleep(5)  # 等待一段时间以确保服务重启完成run_command(ssh_client, f'sudo systemctl status {service_name}')

 

  • restart_service() 函数接收一个服务名 service_name,使用 sudo systemctl 命令重启指定的服务,并检查服务状态以确认是否重启成功。
     
2.7 主函数
 
def main():ssh_client = connect_to_server()if ssh_client:get_system_info(ssh_client)restart_service(ssh_client, 'apache2')  # 以 Apache2 为例,可以根据需要替换成你的服务名ssh_client.close()print("Script execution completed.")else:print("Exiting script due to connection error.")if __name__ == "__main__":main()
  • main() 函数是脚本的入口点。
  • 在 main() 函数中,首先调用 connect_to_server() 连接到远程服务器。
  • 如果连接成功,则依次调用 get_system_info() 和 restart_service() 函数来执行任务。
  • 最后关闭 SSH 连接并打印执行完成的信息;如果连接失败,则打印连接错误信息并退出脚本。



     

三.致谢
 

非常感谢您阅读我的博客!如果您有任何问题、建议或想了解特定主题,请随时告诉我。您的反馈对我非常重要,我将继续努力提供高质量的内容。

如果您喜欢我的博客,请考虑订阅我们的更新,这样您就不会错过任何新的文章和信息。同时,欢迎您分享我们的博客给更多的朋友和同事,让更多人受益。

再次感谢您的支持和关注!如果您有任何想法或需求,请随时与我们联系。祝您生活愉快,学习进步!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/50178.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop集群安装配置

文章目录 Hadoop部署配置集群配置历史服务器配置日志的聚集分发Hadoop群起集群Hadoop群起脚本 准备工作:需要3台虚拟机,每台虚拟机搭建好JDK并配置环境变量 Hadoop部署 1)集群部署规划 注意:NameNode和SecondaryNameNode不要安…

批处理操作系统、分时操作系统、实时操作系统

批处理操作系统: 特点:批处理操作系统主要用于处理一系列作业。作业是把程序、数据连同作业说明书组织起来的任务单位,这些作业被组织成批作业。系统将这些作业按顺序执行,用户在提交作业后通常不需要等待作业完成,而是…

Hadoop NameNode 进入 Safe Mode 的问题分析与解决方案

随着大数据技术的不断发展,Hadoop 已经成为了处理海量数据不可或缺的一部分。然而,在使用 Hadoop 的过程中,我们经常会遇到 NameNode 进入 Safe Mode 的情况,这可能会导致集群暂时无法进行数据写入操作。本文将详细介绍 NameNode …

Java OpenCV 图像处理40 图形图像 图片裁切ROI

Java OpenCV 图像处理40 图形图像 图片裁切 在 OpenCV 中,Rect 类是用来表示矩形的数据结构,通常用于定义图像处理中的感兴趣区域(Region of Interest,ROI),或者指定图像中的某个区域的位置和大小。Rect 类…

使用Apache SeaTunnel进行二次开发的实践分享

大家好,我是范佳,是Apache SeaTunnel社区的PMC member。今天给大家分享一些基于Apache SeaTunnel二次开发的内容。 这部分内容主要涉及代码层面的知识,如果大家有什么疑问,欢迎来社区找我交流! 引言 大部分数据开发工…

如何使用 API list 极狐GitLab 容器镜像仓库中的 tag?

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署…

【Pytorch实战教程】内存泄漏以及Pytorch中内存泄露的注意事项

文章目录 内存泄漏的原因内存泄漏的影响在不同编程语言中的内存泄漏在PyTorch中的内存泄漏示例总结内存泄漏是指在计算机 程序运行过程中, 动态分配的 内存由于某些原因 没有被释放或回收,导致这些内存块 无法再被使用或重新分配。 内存泄漏会导致程序占用越来越多的内存…

【微信小程序实战教程】之微信小程序 WXML 语法详解

WXML语法基础 从本章开始,我们就正式进入到了小程序项目开发学习的初级阶段,本章将介绍小程序的界面构成。有过网页开发学习经历的同学都知道,网页开发所使用的技术是HTML、CSS和JS,其中HTML用于描述整个网页的结构,也…

第三十一天 chrome调试工具

打开调试工具 页面空白处右击 检查 或者F12 使用调试工具 ctrl滚轮改变代码大小 左边是html 右边是css css可以直接改动数值左右箭头或者直接输入 查看颜色 ctrl0 复原浏览器大小 点击元素右侧出现样式引入 没有的话 说明类名或者样式引用错误 这里的.new-left是存在的 如果类…

四步实现网站HTTPS访问

随着网络安全的重要性日益凸显,HTTPS(超文本传输安全协议)已成为现代网站的标准配置。HTTPS协议作为HTTP协议的安全版本,通过SSL协议加密数据传输,不仅能保护用户数据的安全,还能提升搜索引擎排名&#xff…

已经安装了pycryptodome,但是导入的时候始终报错:ModuleNotFoundError: No module named “Crypto”

嗨,我是兰若,如果你在安装pycryptodome时,始终安装不上,那么你一定要看这篇文章,大部分的小伙伴是已经安装了 pycryptodome,但仍然无法导入,可能有几个原因。以下是一些常见的解决方案&#xff…

重塑互联网生态:探索Web 3.0、大数据与隐私保护的新篇章

引言:互联网的新纪元 随着互联网技术的日新月异,我们正迈入一个全新的时代,其中Web 3.0、大数据以及隐私保护成为塑造未来互联网生态的三大核心力量。它们不仅改变了我们与互联网交互的方式,更深刻地影响着社会的方方面面。 Web…

linux之shell脚本实战

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

docker 构建 mongodb

最近需要在虚拟机上构建搭建mongo的docker容器,搞了半天老有错,归其原因,是因为现在最新的mango镜像的启动方式发生了变化,故此现在好多帖子,就是错的。 ok,话不多说: # 拉取最新镜像&#xf…

华为云依赖引入错误

问题:记录一次项目加在华为云依赖错误,如下: 错误信息:Could not find artifact com.huawei.storage:esdk-obs-java:pom:3.1.2.1 in bintray-qcloud-maven-repo (https://dl.bintray.com/qcloud/maven-repo/) 找到本地仓库&#…

蓝牙网关厂家推荐:北京桂花网科技有限公司

在物联网技术日新月异的今天,蓝牙网关作为连接蓝牙设备与物联网系统的关键桥梁,其重要性日益凸显。在众多蓝牙网关厂家中,北京桂花网科技有限公司(Cassia Networks)以其卓越的技术实力、丰富的产品线和广泛的应用场景&…

【CentOS】CentOS系统硬件信息获取脚本

CentOS系统硬件信息获取脚本 在日常的 CentOS 系统管理中,我们经常需要获取系统的硬件信息,如 CPU 核心数、内存大小、硬盘容量和操作系统版本等。本文将介绍一个简单的 Bash 脚本,通过调用系统命令来获取这些信息,并格式化输出&…

Minos 多主机分布式 docker-compose 集群部署

参考 docker-compose搭建多主机分布式minio - 会bk的鱼 - 博客园 (cnblogs.com) Minio 是个基于 Golang 编写的开源对象存储套件,虽然轻量,却拥有着不错的性能 中文地址:MinIO | 用于AI的S3 & Kubernetes原生对象存储 官网地址&#xf…

JavaScript数据筛选和模糊搜索

HTML样式&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>数据筛选</title><link rel"stylesheet" href"./css/data.css"> </head><body><div class"…

系留无人机在技术上有哪些优势或创新点

系留无人机在技术上具有显著的优势和创新点&#xff0c;主要体现在以下几个方面&#xff1a; 1. 长航时飞行作业&#xff1a; - 系留无人机系统由地面通过市电、发电机或电池组供电&#xff0c;并通过系留线缆将电力传输至无人机&#xff0c;实现了不间断供电。 - 这种供电方式…