python_paramiko模块

背景:想在windows环境下,上传压缩文件到linux指定的目录位置并且解压出来,省去了我逐个放置地图数据到后台的重复性工作。

解决办法:paramiko模块来实现

paramiko模块简介:
python中的paramiko模块是用来实现ssh连接到远程服务器上的库,在进行连接的时候,可以用来执行命令,也可以用来上传文件。

# coding=utf-8
import paramiko


# 场景1:连接远程服务器,执行命令。
"""
1、创建客户端_用于远程连接服务器(实例化一个客户端类)
2、客户端_身份验证(hostkey)     # Are you sure you want to continue connecting (yes/no)? yes
3、客户端_连接服务器
4、客户端_执行命令
5、输出结果_utf-8格式
paramiko模块下最基本的类:SSHClient()
"""
client=paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname='172.25.254.169', port=22, username='root', password='***')
stdin,stdout,stderr=client.exec_command('hostname')
print(stdout.read().decode('utf-8'))
client.close()


# 场景2:连接远程服务器,运输文件.(transport~运送、运输)
"""
1、创建会话_并进行身份验证,
2、创建隧道_客户端从上面的会话中
3、客户端_执行命令(上传、下载)
"""
tp = paramiko.Transport("xx.xx.xx.xx",22)
tp.connect(username='root',password='***')
sftp = paramiko.SFTPClient.from_transport(tp)
sftp.put('本地路径文件','服务器路径文件')
tp.close()


class Ssh_host:

    def __init__(self, hostname, port = 22, user = "root", passwd = "***"):
        """
        默认是root连接后台,但也可以用omc的账户密码连接。
        :param hostname: 要连接的服务器名
        :param port: 端口
        :param user: 用户
        :param passwd: 密码
        """
        self.hostname = hostname
        self.port = port
        self.user = user
        self.passwd = passwd

    def cmd(self, conn, args):
        stdin, stdout, stderr = conn.exec_cmdmand(f"{args}")
        result = stdout.read().decode('utf-8')
        return result

    def upload(self, local, server):
        """
        上传文件
        :param local: 需要上传的文件的绝对路径,一直到文件
        :param server: 上传到服务器的绝对路径,一直到文件名
        :return:
        """
        try:
            transport = paramiko.Transport(self.hostname, int(self.port))
            transport.connect(username=self.user, password=self.passwd)
        except:
            print(f'{self.hostname}主机连接失败...')
        else:
            sftp = paramiko.SFTPClient.from_transport(transport)
            sftp.put(f"{local}", f"{server}" )
            transport.close()

    # 然后执行命令,把文件解压到制定路径。
    def upload_place(self):
        global client
        try:
            ssh = paramiko.SSHClient()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            ssh.connect(hostname, port=22, username='root', password='***')
            # 找到目的服务器的ip
            
            # 执行命令跳转到目的服务器
            Ssh_host.cmd(ssh, "ssh root@ip")
            Ssh_host.cmd(ssh, "密码")
            Ssh_host.cmd(ssh, "scp root@ip:/home/omc /***")
            Ssh_host.cmd(ssh, "密码")
            Ssh_host.cmd(ssh, "unzip ***")
            Ssh_host.cmd(ssh, "chmod +x %s")
            ssh.close()
        except:
            print("命令执行失败")

1.pycharm内安装
进入pycharm,执行‘import paramiko‘,发现没有paramiko,此时我们将鼠标放在paramiko上,按‘alt + enter‘,会出现如下图界面,并选择第一个进行安装。
在这里插入图片描述
2、外部安装
yum -y install python-devel【python-dev或python-devel称为是python的开发包】
c:\python39\python.exe -m pip install --upgrade pip【python目录下更新下pip版本】
pip install pycrypto【paramiko依赖pycryto这个模块】
pip install paramiko

猜你喜欢

转载自blog.csdn.net/weixin_45451320/article/details/114238085