1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import os
import tkinter
import zipfile
from datetime import datetime
from tkinter.messagebox import *
import paramiko
# ssh_host = "hadoop5"
# ssh_port = 22
# ssh_user = "root"
# ssh_pwd = "LrmkEqypH4ZV4S4jA3gq3tSRTNsp2gpjqupLDM5K"
# ssh_host = "47.90.241.149"
# ssh_port = 22
# ssh_user = "root"
# ssh_pwd = "ElGB62S1pybws9Le"
ssh_host = "104.244.91.203"
ssh_port = 26696
ssh_user = "root"
ssh_pwd = "PRVQ4CkwyxnD"
def crlf_2_lf(full_path):
"""
sh windows脚本转换为 unix分隔符
:param full_path:
:return:
"""
WINDOWS_LINE_ENDING = b'\r\n'
UNIX_LINE_ENDING = b'\n'
with open(full_path, 'rb') as open_file:
content = open_file.read()
return content.replace(WINDOWS_LINE_ENDING, UNIX_LINE_ENDING)
def handle_zip(dir_name, filename):
zfName = filename
result_path = os.path.join(os.getcwd(), zfName)
try:
os.remove(result_path)
except:
pass
foo = zipfile.ZipFile(zfName, 'w')
for root, dirs, files in os.walk(dir_name):
for f in files:
full_path = os.path.join(root, f)
zip_path = full_path[len(dir_name) + 1:]
if f.startswith("."):
continue
if full_path.endswith("sh"):
foo.writestr(zinfo_or_arcname=zip_path, data=crlf_2_lf(full_path))
pass
else:
foo.write(full_path, zip_path)
foo.close()
print("压缩文件成功!!")
print(f"压缩文件目录为{result_path}")
return result_path
def put_and_unzip(local_file, remote_dir):
window = tkinter.Tk()
window.withdraw()
result = askquestion('确认', f'是否确认部署到目录{remote_dir}')
if (result == 'no'):
return
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=ssh_host, port=ssh_port, username=ssh_user, password=ssh_pwd)
print("连接远程服务器成功...")
# 时间后缀
suffix = datetime.now().strftime("%m_%d_%H_%M")
cmd = f"mv {remote_dir} {remote_dir}_back_{suffix}"
print("===================执行命令=======================")
print(cmd)
client.exec_command(cmd)
cmd = f"mkdir {remote_dir}"
print("===================执行命令=======================")
print(cmd)
client.exec_command(cmd)
print(f"备份远程目录{remote_dir}下的文件中.....")
sftp = client.open_sftp()
file_name = local_file[local_file.rfind("\\") + 1:]
remote_path = f"{remote_dir}/{file_name}"
print(f"上传文件【{local_file}】到远程【{remote_path}】中...")
sftp.put(local_file, remote_path)
print("上传成功!!")
cmd = f""" cd {remote_dir} && unzip -d {remote_dir} {file_name}"""
print("===================执行命令=======================")
print(cmd)
client.exec_command(cmd)
print(f"解压远程压缩文件{remote_path}中.....")
cmd = f"rm -rf {remote_path}"
print("===================执行命令=======================")
print(cmd)
client.exec_command(cmd)
print(f"删除远程压缩文件{remote_path}中.....")
client.close()
pass
if __name__ == '__main__':
local_dir = "E:\Amazon-Selection\\py_gpt"
remote_dir = "/opt/py_gpt"
result_path = handle_zip(local_dir, "result.zip")
put_and_unzip(result_path, remote_dir)
# python -m flask run