自动化运维paramiko基于python的SSH协议的实现链接Linux服务器


paramiko模块
基于python的SSH协议的实现
作用:
1、远程执行命令
2、上传、下载文件
安装模块
> pip install paramiko

一、配置虚拟环境

在CMD命令行进行操作
虚拟环境的操作步骤

1、创建虚拟环境
例 python -m venv 虚拟环境名称

	C:\Users\martin>d: 		//进入D盘

	D:\>python -m venv projectA_venv

2、进入虚拟环境

D:\>cd projectA_venv

D:\projectA_venv>cd Scripts

D:\projectA_venv\Scripts>activate    

(projectA_venv) D:\>pip install pymysql    //安装数据库

3、退出虚拟环境

(projectA_venv) D:\projectA_venv\Scripts>deactivate.bat

二、远程命令执行

1、远程单条命令执行 Python代码实现

import paramiko
def exeCMD():       #杨玉庭
    # 创建ssh客户端工具
    ssh_client = paramiko.SSHClient()

    # 设置丢失主机密钥的策略为自动添加
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    # 创建与服务器的SSH连接
    ssh_client.connect(hostname="192.168.84.2", port=22, username="root", password="redhat")
    # 执行命令
    '''
        返回三个特殊文件, 标准输入、标准输出、标准错误输出
            标准输入:用于向交互式命令传递参数
            标准输出:保存命令的正常执行结果
            标准错误输出:保存命令的报错信息 
    '''
    stdin, stdout, stderr = ssh_client.exec_command("ifconfig")
    print(stdout.read().decode("utf-8"))

    ssh_client.close()

if __name__ == '__main__':
    exeCMD()

运行结果
在这里插入图片描述

2、远程批量执行命令

代码实现:

import paramiko
import sys
#杨玉庭
def exeCMD(ip, username, password, cmd, port=22):
    ssh_client = paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    try:
        ssh_client.connect(hostname=ip, username=username, password=password, port=port)
    except Exception as e:
        print("服务器%s连接失败!!!" % ip)
        print(e)
        sys.exit()

    stdin,stdout,stderr = ssh_client.exec_command(cmd)
    cmd_result = stdout.read().decode("utf-8")

    ssh_client.close()
    return cmd_result


if __name__ == '__main__':
    servers = {
        "192.168.84.2":{
            "user": "root",
            "password":"redhat",
            "port": 22
        },
        # "192.168.183.11": {
        #     "user": "root",
        #     "password": "redhat",
        #     "port": 22
        # }
    }
    cmd = input("执行命令>>>   ").strip()
    for ip, info in servers.items():
        result = exeCMD(ip=ip, username=info.get("user"),password=info.get("password"),port=info.get("port"), cmd=cmd)
        print("服务器%s执行%s命令的结果: " % (ip, cmd))
        print(result)
        print("---------" * 10)

3、Linux部分实现

设置IP地址
在这里插入图片描述
关闭防火墙
在这里插入图片描述

三、文件的上传与下载

1、Python代码实现

import paramiko
import os
import sys

def fileOP():
    # 创建服务器的SSH连接
    ssh_conn = paramiko.Transport(("192.168.84.2", 22))
    # 进行用户名、密码认证
    ssh_conn.connect(username="root", password="redhat")

    # 基于现有的SSH连接创建ftp客户端
    ftp_client = paramiko.SFTPClient.from_transport(ssh_conn)

    ftp_client.put(r"D:\28\yyt\yy\test.jpeg", "/tmp/test.jpeg")

    #ftp_client.get("/tmp/yyt", r"D:\28\yyt\yy")	#文件下载

    ftp_client.close()
    ssh_conn.close()


if __name__ == '__main__':
    fileOP()

在这里插入图片描述

2、Linux服务端测试结果

基于以上的Linux的配置进行测试:
在这里插入图片描述
在/tmp/下test.jepg的图片已经上传成功

文件下载命令改换为:

ftp_client.get("/tmp/yyt", r"D:\28\yyt\yy")	#文件下载,前面为远程路径,后面为本地路径
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值