• 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使用密钥文件上传

  • 相关阅读:
    刨根问底:为什么玩游戏会让手机变得更热?
    linux问题总结2
    【位运算】把整数以二进制形式打印出来玩玩
    String
    linux入门到精通-第三章-vi(vim)编辑器
    虾皮二面:既然有 HTTP 协议,为什么还要有 RPC?
    C++笔记
    计算有向图点的入度与出度
    【动手学深度学习】课程笔记 00-03 深度学习介绍及环境配置
    微服务入门(RestTemplate、Eureka、Nacos、Feign、Gateway)
  • 原文地址:https://blog.csdn.net/weixin_44559752/article/details/132782217