返回顶部

Django实现文件上传、文件列表查看、修改、限流和日志记录2

Django实现文件上传、文件列表查看、修改、限流和日志记录2

本章节优化新增功能使用ssh 秘钥连接远程服务器进行文件上传

使用ssh私钥连接远程服务器上传文件

使用SSH私钥连接远程服务器并上传文件,你可以使用paramiko库来实现SSH连接和文件传输的功能。

首先,确保你已经生成了SSH密钥对,并将私钥文件保存在本地。

paramiko库来建立SSH连接,并使用key_filename参数指定私钥文件的路径。然后,我们使用sftp.putfo()方法将文件对象上传到远程服务器的指定目录。

Django项目环境基于上一章节的项目环境

生成秘钥

创建秘钥并使用SSH和秘钥进行连接,需要将生成的秘钥存放在项目中后面使用连接:


#生成RSA秘钥对
ssh-keygen -t rsa -b 2048 -f private_key.pem

#选择保存秘钥的路径和文件名。默认情况下,私钥将保存在~/.ssh/id_rsa,公钥将保存在~/.ssh/id_rsa.pub,在生成秘钥对的过程中,您可以选择设置一个密码来保护私钥文件。这是可选的,如果您不希望设置密码,请直接按回车跳过。
# 生成秘钥对后,将公钥复制到远程服务器。您可以使用以下命令将公钥复制到远程服务器,将username和server_ip替换为实际的用户名和服务器IP地址:
ssh-copy-id -i private_key.pem.pub  wei@10.0.0.127

#通过SSH和秘钥进行测试连接
ssh -i private_key.pem  wei@10.0.0.127

配置上传视图

然后,在file_upload_app/views.py文件中,添加一个新的视图函数来处理文件上传:

使用paramiko库来建立SSH连接,并使用key_filename参数指定私钥文件的路径。然后,我们使用sftp.putfo()方法将文件对象上传到远程服务器的指定目录。

import paramiko

def upload_file(request):
    if request.method == 'POST':
        file = request.FILES.get('file')
        if file is not None:
            
            #秘钥连接
            private_key_path = '/git/Python/file_upload/sleepy_bear.pem'  # 替换为你的私钥文件路径
            private_key = paramiko.RSAKey(filename=private_key_path)
            ssh = paramiko.SSHClient()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            ssh.connect('110.40.168.137', username='root', pkey=private_key)

            try:
                # 上传文件到远程服务器的指定目录
                remote_file_path = '/data/' + file.name
                sftp = ssh.open_sftp()
                sftp.putfo(file, remote_file_path)
                sftp.close()
                ssh.close()

                return HttpResponse('文件上传成功')
            except Exception as e:
                return HttpResponse('文件上传失败:{}'.format(str(e)))

    return render(request, 'upload_file.html')

 

至此,使用安全秘钥连接远程服务器已经优化完成

posted @ 2023-08-13 16:20  九尾cat  阅读(83)  评论(0编辑  收藏  举报