dxbjfu0 2019-06-21
创业公司,但也逐渐积累了十多态服务器,有时候因为一点小疏忽,就导致了十多台服务器返工,刚开始会使用ssh一台一台登上去修改,或者scp、sftp一个一个上传,基本上只要发生一点错误,就会花去小半天时间,这不是最重要的,最重要的是,小半天时间都在做一件重复的事:ssh链接 -> 找到文件目录 -> 修改 (或者:scp上传 -> 查看效果 ......)
时间久了,就再也不想这样干了,于是学习了python,写了一段利用scp上传文件的脚本:
引入包: paramiko
引入服务器的配置:from config.server import server_data
添加下面的代码:
#!/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') }, ] }
];