簡體   English   中英

從命令行運行程序,提示輸入密碼並自動為其提供密碼(cmd.exe,python)

[英]Run program from command line what prompts password and automatically provide password for it (cmd.exe, python)

我有命令行程序,提示輸入密碼:

> cwrsync root@NN.NN.NN.NN:/src /cygdrive/c/dst

輸出(當我從cmd.exe命令行運行它時):

root@NN.NN.NN.NN's password:

當我手動輸入密碼時,一切正常。 輸出:

skipping directory src

我想從命令行或python腳本自動為其提供密碼。

我試過了:

一。 從命令行:

> echo pass|cwrsync -r root@NN.NN.NN.NN:/src /cygdrive/c/dst

不工作 輸出:

root@NN.NN.NN.NN's password:

二。 從python腳本開始。 test.py:

import subprocess
cmd = "cwrsync -r root@NN.NN.NN.NN:/src /cygdrive/c/dst"
proc = subprocess.Popen(cmd1, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, shell=True)
std1, std2 = proc.communicate("pass")
print std1print std2

不工作。 輸出:

Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: unexplained error (code 255) at io.c(235) [Receiver=3.1.1]

面向安全的程序通常直接在io上要求輸入密碼,而不是讀取stdin。 並作為 :

echo pass|cwrsync -r root@NN.NN.NN.NN:/src /cygdrive/c/dst

確實詢問了密碼,我認為csrsync是直接從控制台讀取的。

在這種情況下,如果不進行一些工作和進行低級編程,就無法使其自動化,因為您將不得不模擬鍵盤操作。 相反,您應該搜索文檔,因為看起來它使用了基礎ssh ,所以它很可能接受公鑰對。 如果它接受一個沒有密碼短語的密碼,那么您應該能夠使其自動化。

嘗試在您的stdin字符串communicate呼叫中發送換行符,如下所示:

import subprocess
cmd = ['cwrsync', '-r', 'root@NN.NN.NN.NN:/src', '/cygdrive/c/dst']
proc = subprocess.Popen(cmd, 
                        stdout=subprocess.PIPE, 
                        stderr=subprocess.PIPE, 
                        stdin=subprocess.PIPE, 
                        shell=True)
std1, std2 = proc.communicate("pass\r\n\r\n")
print std1
print std2

您還應該查看它是否適用於shell=False (來自子過程docs ):

使用shell=True可能會帶來安全隱患。 有關詳細信息,請參見“ 常用參數”下的警告。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM