0

我有一个简单的表单,用户可以在其中输入服务器的远程主机、用户名和密码。我在views.py 中使用upload_file 视图处理表单。我想使用用户提供的输入运行以下命令:

rsync --list-only username@serveraddress

要运行以下命令,用户必须输入密码,成功验证后将列出该文件。我已经从用户那里输入了密码,但是我不知道如何使用它。立即运行上述命令后,必须在终端中输入密码。如何在 Django 中实现相同的功能?这是我的views.py:

def upload_file(request):
    if request.method == 'POST':    
        #session_name = request.POST.get['session']
        url = request.POST.get('hostname', False)
        username = request.POST.get('username', False)
        source = str(username) + "@" + str(url)
        command = subprocess.Popen(['rsync', '--list-only', source], stdout=subprocess.PIPE).communicate()[0]
    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))
4

1 回答 1

3

我认为这个问题的标题有点误导,也许应该是“如何传递服务器密码......”。无论如何,如果我理解正确,您可以设置环境变量 RSYNC_PASSWORD:

command = subprocess.Popen(['rsync', '--list-only', source],
                           stdout=subprocess.PIPE,
                           env={'RSYNC_PASSWORD': my_password}).communicate()[0]

注意,环境变量可能对其他系统用户可见

如果这让您感到害怕,您可以使用 rsync 选项--password-file(请参阅 rsync 手册)

还有一点:通过指定env调用者环境不再传递给 rsync 进程。

于 2012-11-09T13:37:51.480 回答