背景:想在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