#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键退出...")