我无法在Django中使用subprocess.Popen传递服务器密码。这是我的完整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传递。
答案 0 :(得分:1)
您的代码(在RSYNC_PASSWORD
中设置密码)是正确的。
我的结论是,您正尝试连接到Rsync中具有不同模块的服务器,如ssh。在ssh的情况下,RSYNC_PASSWORD
变量不工作。
使用fabric执行命令可能是个好主意?它可以为您处理一些事情,虽然它不会解决您的密码问题。如果您通过ssh连接,我建议设置私钥验证。
有关通过ssh:How to automate rsync without asking for password prompt
进行无密码rsync的更多信息,请参阅此问题