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')
至此,使用安全秘钥连接远程服务器已经优化完成