无法在 Django 中使用 Popen 传递服务器密码



我无法使用子进程传递服务器密码。Popen in Django.以下是我的完整 views.py:

from django.shortcuts import render_to_response
from django.template import RequestContext
import subprocess
def upload_file(request):
    '''This function produces the form which allows user to input session_name, their remote host name, username 
    and password of the server. User can either save, load or cancel the form. Load will execute couple Linux commands
    that will list the files in their remote host and server.'''
    if request.method == 'POST':    
        # session_name = request.POST['session']
        url = request.POST['hostname']
        username = request.POST['username']
        global password
        password = request.POST['password']
        global source
        source = str(username) + "@" + str(url)
        command = subprocess.Popen(['rsync', '--list-only', source],
                           stdout=subprocess.PIPE, 
                           env={'RSYNC_PASSWORD': password}).communicate()[0]
        result1 = subprocess.Popen(['ls', '/home/zurelsoft/R'], stdout=subprocess.PIPE).communicate()[0]
        result = ''.join(result1)
        return render_to_response('thanks.html', {'res':result, 'res1':command}, context_instance=RequestContext(request))
    else:
        pass
    return render_to_response('form.html', {'form': 'form'},  context_instance=RequestContext(request))  

这是我从中获取用户输入的表单:

<fieldset>
            <legend>Session</legend>
                <label for="input-one" class="float"><strong>Session Name:</strong></label><br />
                <input class="inp-text" name="session" id="sess" type="text" size="30" /><br />
                <label for="input-two" class="float"><strong>RemoteHost:</strong></label><br />
                <input class="inp-text" name="hostname"  id="host" type="text" size="30" />
                <label for="input-three" class="float"><strong>Username:</strong></label><br />
                <input class="inp-text" name="username"  id="user" type="text" size="30" />
                <label for="input-four" class="float"><strong>Password:</strong></label><br />
                <input class="inp-text" name="password"  id="pass" type="password" size="30" />
        </fieldset>

我做错了什么?密码不是从environment_variable传递的。

您的代码(就RSYNC_PASSWORD中设置密码而言)是正确的。

我的结论是,您正在尝试使用 Rsync 中的不同模块(如 ssh)连接到服务器。在 ssh 的情况下,RSYNC_PASSWORD变量不起作用。

也许使用结构执行命令是个好主意?它可以为您处理一些事情,尽管它不会解决您的密码问题。如果您通过ssh连接,那么我建议您设置私钥身份验证。

有关通过 ssh 实现无密码 rsync 的更多信息,请参阅此问题:如何在不要求密码提示的情况下自动执行 rsync

最新更新