用python跑一边脚本,把数据传到几台服务器的指定位置

dxbjfu0 2019-06-21

创业公司,但也逐渐积累了十多态服务器,有时候因为一点小疏忽,就导致了十多台服务器返工,刚开始会使用ssh一台一台登上去修改,或者scp、sftp一个一个上传,基本上只要发生一点错误,就会花去小半天时间,这不是最重要的,最重要的是,小半天时间都在做一件重复的事:ssh链接 -> 找到文件目录 -> 修改 (或者:scp上传 -> 查看效果 ......)

时间久了,就再也不想这样干了,于是学习了python,写了一段利用scp上传文件的脚本:


  1. 引入包: paramiko

  2. 引入服务器的配置:from config.server import server_data

  3. 添加下面的代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import paramiko

from config.server import server_data # 服务器配置数据

import sys
reload(sys)
sys.setdefaultencoding('utf8')

# 建立单独的scp链接
def trans (hostname, username, password, port, sites):

    scp = paramiko.Transport((hostname, port))
    scp.connect(username=username, password=password)

    sftp = paramiko.SFTPClient.from_transport(scp)

    for v in sites:
        print v
        u = '/host/sites/' + v['domain'] + '/msites/public/images/12124.png' # 文件在服务器中存储的路径
        print u
        try:
            sftp.put('./upload/12124.png', u) # 文件本地存储路径
        except Exception as e:
            print "Error: %s" % e
            pass

    sftp.close()

# 执行每个网站
def main ():

    i = 0
    for data in server_data:
        i = i + 1
        print i
        trans(data['hostname'], data['username'], data['password'], data['port'], data['sites'])

if __name__ == '__main__':
    main()

服务器配置:

server_data = [

{
    'hostname': '', # 需要填写
    'id': , # 需要填写
    'username': 'root',
    'port': 22, # 需要填写
    'password': '', # 需要填写
    'sites': [
        {
            'name': '百度'.decode('utf-8'),
            'domain': 'baidu.com',
            'alias': 'bd',
            'fallname': '百度'.decode('utf-8')
        },
       {
            'name': '百度'.decode('utf-8'),
            'domain': 'baidu.com',
            'alias': 'bd',
            'fallname': '百度'.decode('utf-8')
        },
        {
            'name': '百度'.decode('utf-8'),
            'domain': 'baidu.com',
            'alias': 'bd',
            'fallname': '百度'.decode('utf-8')
        },
    ]
},
{
    'hostname': '',
    'id': ,
    'username': 'root',
    'port': 22,
    'password': '',
    'sites': [
        {
            'name': '百度'.decode('utf-8'),
            'domain': 'baidu.com',
            'alias': 'bd',
            'fallname': '百度'.decode('utf-8')
        },
       {
            'name': '百度'.decode('utf-8'),
            'domain': 'baidu.com',
            'alias': 'bd',
            'fallname': '百度'.decode('utf-8')
        },
        {
            'name': '百度'.decode('utf-8'),
            'domain': 'baidu.com',
            'alias': 'bd',
            'fallname': '百度'.decode('utf-8')
        },
    ]
}

];

相关推荐