python测试SFTP连通性

代码

bash 复制代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import paramiko
import socket
import os

# ======== 配置参数(根据你的环境修改) ========
HOST = "0.0.0.0"      # 填写SFTP服务器地址
PORT = 22                      # SFTP端口(默认22)
USERNAME = "user"          # 填写用户名
PASSWORD = "12346"          # 填写密码(如果用私钥登录,留空)
PRIVATE_KEY_PATH = None        # 私钥路径,如 "/home/user/.ssh/id_rsa",不用则设为 None
TIMEOUT = 60                  # 超时时间(秒)
REMOTE_DIR = "/incoming"       # 填写测试切换的远程目录(可选)
UPLOAD_FILE = None             # 本地文件路径,用于上传测试(可选)
DOWNLOAD_FILE = None           # 远程文件名或本地保存路径(可选)
# ============================================

def test_sftp():
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())  # 测试环境自动接受主机密钥

    try:
        # 加载私钥(如果指定)
        pkey = None
        if PRIVATE_KEY_PATH:
            pkey = paramiko.RSAKey.from_private_key_file(PRIVATE_KEY_PATH)

        print(f"[INFO] Connecting to {HOST}:{PORT} ...")
        client.connect(
            hostname=HOST,
            port=PORT,
            username=USERNAME,
            password=PASSWORD,
            pkey=pkey,
            timeout=TIMEOUT,
            banner_timeout=TIMEOUT,
            auth_timeout=TIMEOUT,
        )
        print("[OK] SSH connected")

        # 打开 SFTP
        sftp = client.open_sftp()
        print("[OK] SFTP channel opened")

        # 切换目录(可选)
        if REMOTE_DIR:
            sftp.chdir(REMOTE_DIR)
            print(f"[OK] Changed directory to {REMOTE_DIR}")

        # 当前目录 & 列表
        pwd = sftp.getcwd()
        print(f"[OK] Current directory: {pwd}")
        print("[OK] Directory listing:")
        for name in sftp.listdir():
            print("   ", name)

        # 上传测试(可选)
        if UPLOAD_FILE:
            basename = os.path.basename(UPLOAD_FILE)
            sftp.put(UPLOAD_FILE, basename)
            print(f"[OK] Uploaded: {basename}")

        # 下载测试(可选)
        if DOWNLOAD_FILE:
            remote_name = os.path.basename(DOWNLOAD_FILE)
            local_target = DOWNLOAD_FILE
            if os.path.isdir(DOWNLOAD_FILE):
                local_target = os.path.join(DOWNLOAD_FILE, remote_name)
            sftp.get(remote_name, local_target)
            print(f"[OK] Downloaded: {remote_name} -> {local_target}")

        sftp.close()
        client.close()
        print("[OK] SFTP test completed successfully")

    except (paramiko.SSHException, socket.error) as e:
        print(f"[ERROR] SFTP error: {e}")
    except Exception as e:
        print(f"[ERROR] Unexpected error: {e}")
    finally:
        try:
            client.close()
        except Exception:
            pass

if __name__ == "__main__":
    test_sftp()

执行成功如图

相关推荐
TechWJ1 分钟前
PyPTO编程范式深度解读:让NPU开发像写Python一样简单
开发语言·python·cann·pypto
枷锁—sha8 分钟前
【SRC】SQL注入WAF 绕过应对策略(二)
网络·数据库·python·sql·安全·网络安全
abluckyboy23 分钟前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法
lly20240624 分钟前
C++ 文件和流
开发语言
m0_7066532330 分钟前
分布式系统安全通信
开发语言·c++·算法
喵手41 分钟前
Python爬虫实战:构建各地统计局数据发布板块的自动化索引爬虫(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集数据csv导出·采集各地统计局数据发布数据·统计局数据采集
寻寻觅觅☆1 小时前
东华OJ-基础题-104-A == B ?(C++)
开发语言·c++
lightqjx1 小时前
【C++】unordered系列的封装
开发语言·c++·stl·unordered系列
天天爱吃肉82181 小时前
跟着创意天才周杰伦学新能源汽车研发测试!3年从工程师到领域专家的成长秘籍!
数据库·python·算法·分类·汽车
zh_xuan1 小时前
kotlin lazy委托异常时执行流程
开发语言·kotlin