如何使用 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
我用 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