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マニュアルを参照)

もう 1 つ:env呼び出し元の環境を指定することで、rsync プロセスに渡されなくなりました。

于 2012-11-09T13:37:51.480 に答える