栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python中paramiko模块

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python中paramiko模块

paramiko

1)实现了ssh协议

2)实现ssh远程控制

3)实现sftp功能

import paramiko  #安装后导入模块

#创建实例 
ssh = paramiko.SSHClient()  
#相当于在询问是否接受服务器秘钥时自动回答yes
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  

ssh.connect('192.168.59.112',username='root',password='211314')

"""
a.标准输入       用于实现交互式命令
b.标准输出       保存命令的正确执行结果
c.标准错误输出   保存命令的错误信息
"""

a ,b ,c = ssh.exec_command('mkdir /root/newdir')
print(str(b.read()))
ssh.close

案例代码,查看多台服务器的磁盘使用率(此代码演示查看192.168.59.131-132)

import paramiko
import sys

def sshExecCMD(ip , uesrname , password ):
    ssh_client = paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy)
    print("请求%s:" % ip)
    try:
       ssh_client.connect(hostname=ip ,username=uesrname ,password=password)
    except Exception as e:
        print("服务器%s连接失败!!!" % ip)
        print(e)
        sys.exit()

    stdin ,stdout ,stderr = ssh_client.exec_command("df -h")
    print(stdout.read().decode("utf-8"))

    ssh_client.close()

if __name__ == '__main__':
    for i in range(131, 133):
        server = {
            '192.168.59.' + str(i): {
                "username": "root",
                "password": "211314",
                #"port": 22
            }
        }
        for ip, info in server.items():
            sshExecCMD(
                ip=ip,
                uesrname=info.get("username"),
                password=info.get("password"),
                #port=info.get("port")
            )
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
/usr/bin/python3.7 /root/PycharmProjects/pythonProject/webone.py
请求192.168.59.131:
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 1.9G     0  1.9G    0% /dev
tmpfs                    1.9G     0  1.9G    0% /dev/shm
tmpfs                    1.9G   12M  1.9G    1% /run
tmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/centos-root  4.4G  3.7G  744M   84% /
/dev/sda1               1014M  151M  864M   15% /boot
tmpfs                    1.9G   12K  1.9G    1% /var/lib/kubelet/pods/33185cf6-cdfe-4e1e-9a31-e8de94263fa3/volumes/kubernetes.io~secret/flannel-token-xkp6d
tmpfs                    1.9G   12K  1.9G    1% /var/lib/kubelet/pods/846866a4-0983-4977-946b-0d91e5576b90/volumes/kubernetes.io~secret/kube-proxy-token-nxmps
overlay                  4.4G  3.7G  744M   84% /var/lib/docker/overlay2/c585e004fd183248031ba2bd41ceaeca30aba69e4c29842c61c5b33caace5827/merged
shm                       64M     0   64M    0% /var/lib/docker/containers/2bf609ddce0c66f1313210b63aa03997ac073b56466a3426504b2ce6005c0193/mounts/shm
overlay                  4.4G  3.7G  744M   84% /var/lib/docker/overlay2/0e1cf81dbe957116a576033c11cb2d470517eac9daf8071488a43826e7740d7c/merged
overlay                  4.4G  3.7G  744M   84% /var/lib/docker/overlay2/6cff54918ae7b8ba0f9acc38ae2481aa9602039a4471c01f651a301df163a01a/merged
shm                       64M     0   64M    0% /var/lib/docker/containers/94f5576393ba10fc9e7515d5c70722e3738ebed8ebf1a4d98bcde259f15ff50a/mounts/shm
overlay                  4.4G  3.7G  744M   84% /var/lib/docker/overlay2/c709ceeb38a5fe3f310466607d79d74f6cde1bf0089384f214a7322d3d366207/merged
tmpfs                    378M     0  378M    0% /run/user/0

请求192.168.59.132:
服务器192.168.59.132连接失败!!!
[Errno None] Unable to connect to port 22 on 192.168.59.132

进程已结束,退出代码为 0
paramiko上传下载文件
#coding:utf-8

import paramiko

def sshFile():
    #与服务器创建ssh连接
    ssh_conn = paramiko.Transport(("192.168.59.128", 22))
    ssh_conn.connect(username="root", password="211314")
    #基于ssh连接创建ftp客户端
    ftp_client = paramiko.SFTPClient.from_transport(ssh_conn)

    #下载文件  上传和下载要保证客户端和服务端的文件名一致  ./.*?/name == ..*?name
    ftp_client.get('/etc/hosts',r'E:learndjhosts')
    #上传文件
    #ftp_client.put(r"E:learndjhosts","/mnt/hosts")

    ssh_conn.close()

if __name__ == '__main__':
    sshFile()
paramiko往多个服务器上传案例
# coding:utf-8
import paramiko
import os

# localfile:本地文件夹名
# remotedir:服务器目录名称
def sshPutFile(ip, port, username, password, localfile, remotedir):
    # 创建ssh链接
    ssh_conn = paramiko.Transport((ip, port))
    ssh_conn.connect(username=username, password=password)

    # 获取源文件的文件名
    file_name = os.path.basename(localfile)

    # 处理服务器目录名称 /etc/
    if not remotedir.endswith("/"):
        remotedir = remotedir + "/"
    system_file = remotedir + file_name

    ftp_client = paramiko.SFTPClient.from_transport(ssh_conn)
    ftp_client.put(localfile, system_file)

    ssh_conn.close()


if __name__ == '__main__':
    servers = {
        "192.168.59.128":{
            "username": "root",
            "password": "211314",
            "port": 22
        },
        "192.168.59.130": {
            "username": "root",
            "password": "211314",
            "port": 22
        },
        "192.168.59.131": {
            "username": "root",
            "password": "211314",
            "port": 22
        }
    }

    source_file = input("源文件名称(绝对路径):")
    server_dir = input("服务器目录路径:")

    for ip,info in servers.items():
        sshPutFile(
            ip= ip,
            port= info.get("port"),
            username= info.get("username"),
            password= info.get("password"),
            localfile = source_file,
            remotedir= server_dir,
        )

        查看是否上传成功,根据需求写获取ip的方式,此方式仅供参考,配置数量较大是可以采用多线程的方式增加效率。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/272773.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号