• cmd/python命令行密钥上传SFTP,实现自动化上传


    有时候我们会用到用密钥连接SFTP进行文件上传下载移出等操作(比如PS5提交包就需要用到)。而命令行的操作能够集成到生产环境,实现流程自动化,本文简述密钥连接SFTP的方法,实现自动化的上传

    cmd

    sftp连接指令:

    sftp -i ~/.ssh/id_rsa username@hostname
    
    • 1

    注意windows下会要求你的密钥不能存在任意用户都可以访问的目录下。如果报了这个错误,可以把密钥放在C:\Users\[yourName]\.ssh下面。

    python

    上述cmd脚本能正确连接到服务器,连接后可以输入指令(如put localFilePath remoteDir进行文件的上传),但需要先输入连接指令,等待几秒钟出现sftp>提示符后才能开始进一步操作。这种方式无法集成到生产环境的自动化脚本中。

    那我们来研究一下python吧!

    python使用sftp需要用到paramiko

    密码连接

    使用方式:

    transport = paramiko.Transport((hostname, port))
    transport.connect(username=username, password=password)
    
    • 1
    • 2

    完整代码:

    import paramiko
    
    # 建立SFTP连接
    hostname = '远程服务器地址'
    port = 22
    username = '用户名'
    password = '密码'
    
    transport = paramiko.Transport((hostname, port))
    transport.connect(username=username, password=password)
    sftp = transport.open_sftp()
    
    # 在此处执行SFTP操作,例如上传、下载、删除文件等
    
    # 关闭SFTP连接
    sftp.close()
    transport.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    密钥文件连接

    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    ssh.connect(host_name, username=user_name, key_filename=private_key_path)
    
    • 1
    • 2
    • 3
    • 4

    完整代码:

    import paramiko
    
    # 创建SSH客户端
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    # 密钥文件路径
    private_key_path = '/path/to/private_key'
    
    # 连接到SFTP服务器
    result = ssh.connect('hostname', username='username', key_filename=private_key_path)
    
    # 检查连接结果
    if result is None:
        print("连接成功")
    else:
        print("连接失败:", result)
    
    # 关闭SSH连接
    ssh.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    上传、移除文件

    上传:put

    sftp.put(local_file_path, remote_target_path)
    
    • 1

    移除:remove

    result = sftp.remove(remote_target_path)
    if result is None:
        print(f"SFTP: Successfully remove file{remote_target_path}")
    else:
        print(f"sftp: failed to remove file{remote_target_path}, removing result:", ssh_result)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    注意
    这里的put方法跟cmd的不一样,python的put指定的是目标文件路径,cmd指定的是目标目录。也就是说python支持复制的同时改名,而cmd会将文件同名复制过去

    图形化界面:Filezilla使用密钥文件上传

    拓展阅读:Filezilla使用密钥文件上传

  • 相关阅读:
    音频——I2S 左对齐模式(三)
    【Java】SPI在Java中的实现与应用
    最新编程语言排行榜
    sysstat系列:pidstat
    C语言-找鞍点
    centos下
    代碼隨想錄算法訓練營|一刷完結感想,長路漫漫,望你我一起砥礪前行。刷题心得(c++)
    【iOS】浅析static,const,extern关键字
    c++ 内存释放测试
    ESXI主机扩容(VCSA)
  • 原文地址:https://blog.csdn.net/weixin_44559752/article/details/132782217