python连接服务器文件_利用Python自动化发布(连接服务器实现文件的上传/下载)...

一直以来都是手工发布项目,服务器数量多不仅浪费时间还容易出错引起发布事故,所以最近趁着测试迭代任务轻,帮项目组写了一套自动发布的web平台,今天先来记录一下连接服务器的这个过程。

连接服务器用的是第三方库Paramiko,非常强大,可以实现文件的上传/下载,还可以执行命令行,这里只会用到这几个简单的功能

Windows server 、Linux都可以连接,亲测有效!官方文档在这paramiko

先通过pip安装一下

$ pip install paramiko

话不多说,先看代码,这边我是把paramiko提供的api再封装了一下

import paramiko

from logger import info # 我自己封装的日志模块,不用导入

# 把连接断开等一系列操作封装一下

class SSHConnect(object):

def __init__(self, hostname='hostname' username='username', password='password', port=22, timeout=10):

self.hostname = hostname

self.username = username

self.password = password

self.port = port

self.timeout = timeout

# 通过账号密码连接服务器

def connect(self):

try:

transport = paramiko.Transport((self.hostname, self.port))

transport.banner_timeout = self.timeout

transport.connect(username=self.username, password=self.password)

self.__transport = transport

# print(info('server connected'))

print('server connected')

except Exception as e:

print(e)

# 关闭连接

def disconnect(self):

self.__transport.close()

# print(info('server disconnect'))

print('server disconnect')

# 在远程服务器上执行命令行,接收str的命令行

def exec_cmd(self, command):

ssh = paramiko.SSHClient()

ssh._transport = self.__transport

stdin, stdout, stderr = ssh.exec_command(command)

# print(info('cmd execute done'))

return stdout.read()

# print(stdout.read())

# 上传文件到服务器,local_path为本地文件压缩包的路径

# target_path 为服务器的路径,要跟上文件名,如:

# local_path: 'D:\workspace\file.zip'

# target_path: '/root/workspace/file.zip'

def upload(self, local_path, target_path):

try:

print(info('start uploading'))

sftp = paramiko.SFTPClient.from_transport(self.__transport)

sftp.put(local_path, target_path) # paramiko是通过sftp传输文件的,文件大小有限制,建议将文件压缩成zip包后传输

# print(info('upload finished'))

print('upload finished')

except:

# print(info('upload failed'))

print('upload failed')

# 从服务器上获取文件, 与上传文件一致

# remote_path: 服务器文件的路径

# local_path: 本地你要保存的路径,同样要加上文件名

def download(self, remote_path, local_path):

try:

print(info('start downloading'))

sftp = paramiko.SFTPClient.from_transport(self.__transport)

sftp.get(remote_path, local_path)

print(info('download finished'))

except Exception as e:

print(e)

# 测试一下上传文件

if __name__ == '__main__':

cmd = 'pwd && ls'

local_path = 'D:\\workspace\\file.zip'

target_path = '/root/workspace/file.zip'

ssh = SSHConnect(hostname='你的服务器IP',

username='你的服务器用户名最好是root',

password='你的服务器密码')

ssh.connect()

ssh.upload(local_path, target_path) # 上传文件

ssh.exec_cmd(cmd) # 执行命令行

ssh.disconnect() # 最后记得关闭连接

demo是适合连接linux的,如果服务器是windows server的话,需要现在server上安装cygwin并开启ssh服务,这个具体的教程见我下一篇文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值