创业公司,但也逐渐积累了十多态服务器,有时候因为一点小疏忽,就导致了十多台服务器返工,刚开始会使用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')
},
]
}
];