如何使用 django 列出 digitalocean 服务器中的文件?

how to list files in digitalocean server with django?

我用 Django 制作云面板项目,但我遇到了问题。此页面显示后我点击管理按钮:

https://s18.postimg.org/lj7qwc8p5/Ekran_G_r_nt_s_2018-02-21_19-22-33.png

我连接到paramiko。 Paramiko 是正确的工作,但这还没有连接。所以我们将首先使用 connect paramiko 然后再在服务器上的目录上进行验证。

这段代码是错误的:

from django.shortcuts import render
from explorer.models import Servers
from django.http import HttpResponse
import paramiko
import logging
import csv
paramiko.util.log_to_file("filename.log")
# Create your views here.

def listfiles(path,ssh,server,sftp):
        cmd = "cd "+path
        lf = "ls -p | grep -v /"
        f = open('dumps/' + server + 'traverse.sh','w+')
        f.write('#!/bin/bash\n')
        f.close()
        f = open('dumps/'+ server + 'traverse.sh','a+')
        f.write(cmd + "\n")
        f.write(lf)
        f.close()
        sftp.put('dumps/' + server +'traverse.sh ','traverse.sh')
        ssh.exec_command("chmod 777 traverse.sh")
        stdin,stdout,stderr = ssh.exec_command("./traverse.sh")
        data = stdout.read()
        ssh.exec_command("rm -rf traverse.sh")
        return data.split()

第 37 行 = lf = "ls -p | grep -v /"

manage.py里面: #!/usr/bin/env python 导入 os 导入系统

   if __name__ == "__main__":
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cloudpanel.settings")

        from django.core.management import execute_from_command_line

        execute_from_command_line(sys.argv)

这个函数是用paramiko连接到服务器:

def filemanager(request,server,path):
s = Servers.objects.get(boxname = server)
orginalpath = s.path
a = orginalpath.split('/')
a = [k for k in a if k]
orginalpath = "/".join(a)
orginalpath = "/"+orginalpath+"/"
if path == 'new':
    path = orginalpath
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(s.ip,port=s.port,username=s.username,password=s.password)
    t=paramiko.Transport((s.ip,s.port))
    t.connect(username=s.username,password=s.password)
    sftp = paramiko.SFTPClient.from_transport(t)
    remotefiles = listfiles(path,ssh,server,sftp)
    remotedirs = listdirs(path,ssh,server,sftp)
    ssh.close()
    sftp.close()
    modpath = path.replace('/','*')
    return render(request,'manage.html',{'files':remotefiles,'dirs':remotedirs,'path':path,'orginalpath':orginalpath,'server':server,'modpath':modpath})

如何解决我的问题?不要找我英文不好

答案是使用我在问题 ssh.exec_command("chmod 777 traverse.sh") 中使用的 sftp 实例。 'paramiko.SFTPClient.from_transport(t)' 包含 sftp 命令。我应该在命令行中使用 sftp.remove 和 sftp.chmod 行而不是 运行 。谢谢 Martin Prikryl 的回答。

另一个问题link:How to list all the folders and files in the directory after connecting through SFTP in Python