wei/sync/sfto.py

121 lines
3.9 KiB
Python

#weiyongfu
#sftp sync test
import paramiko
import os
from datetime import datetime
import time
def load_private_key(private_key_path):
"""
加载私钥文件
"""
try:
# 首先尝试作为RSA密钥加载
return paramiko.RSAKey.from_private_key_file(private_key_path)
except paramiko.ssh_exception.PasswordRequiredException:
# 如果私钥有密码保护,需要输入密码
key_password = input("请输入私钥密码: ")
return paramiko.RSAKey.from_private_key_file(private_key_path, password=key_password)
except Exception as e1:
print(f"RSA密钥加载失败: {e1}")
try:
# 尝试作为ECDSA密钥加载
return paramiko.ECDSAKey.from_private_key_file(private_key_path)
except Exception as e2:
print(f"ECDSA密钥加载失败: {e2}")
try:
# 尝试作为Ed25519密钥加载
return paramiko.Ed25519Key.from_private_key_file(private_key_path)
except Exception as e3:
print(f"所有密钥格式尝试失败: {e3}")
return None
def check_remote_complete_file(sftp, current_date):
"""
检查远程complete文件中是否包含当前日期的时间戳
"""
remote_complete_path = "/list/10.99.9.75_sftp/L2/complete"
try:
# 尝试读取远程complete文件
with sftp.open(remote_complete_path, 'r') as remote_file:
content = remote_file.read().decode('utf-8')
print(f"远程complete文件内容: {content}")
# 检查是否包含当前日期
if current_date in content:
print(f"远程complete文件已包含当前日期 {current_date}")
return True
else:
print(f"远程complete文件未包含当前日期 {current_date}")
return False
except FileNotFoundError:
print(f"远程complete文件不存在: {remote_complete_path}")
return False
except Exception as e:
print(f"检查远程complete文件时出错: {e}")
return False
def test_complete_and_date():
"""
测试远程complete文件内容和获取当前日期
"""
# 服务器连接信息
hostname = "59.36.23.197"
port = 16888
username = "boyigo"
private_key_path = r"C:\Users\admin\Desktop\运维\SFTP\boyigo"
# 获取当前日期
today = datetime.now()
date_ymd = today.strftime("%Y%m%d")
print("=" * 50)
print("测试开始")
print("=" * 50)
print(f"系统当前时间: {today}")
print(f"获取的日期字符串: {date_ymd}")
print(f"日期格式验证: YYYY={date_ymd[0:4]}, MM={date_ymd[4:6]}, DD={date_ymd[6:8]}")
print("=" * 50)
# 建立连接
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
print("正在连接服务器...")
private_key = load_private_key(private_key_path)
if not private_key:
print("私钥加载失败")
return
ssh_client.connect(hostname, port, username, pkey=private_key, timeout=30)
sftp = ssh_client.open_sftp()
print("连接成功!")
# 检查complete文件
print("\n检查远程complete文件...")
result = check_remote_complete_file(sftp, date_ymd)
if result:
print(f"✓ 远程complete文件包含当前日期 {date_ymd}")
else:
print(f"✗ 远程complete文件不包含当前日期 {date_ymd}")
sftp.close()
ssh_client.close()
except Exception as e:
print(f"连接或检查失败: {e}")
import traceback
traceback.print_exc()
finally:
try:
ssh_client.close()
except:
pass
if __name__ == "__main__":
test_complete_and_date()
print("\n测试完成")
input("按Enter键退出...")