从命令行运行程序提示密码并自动为其提供密码(命令提示符,Python)

2024-10-02 02:43:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有命令行程序提示密码:

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

输出(当我从命令行.exe命令行):

^{pr2}$

当我手动输入密码时,一切正常。输出:

skipping directory src

我想从命令行或python脚本自动提供密码。在

我试过了:

一个。从命令行:

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

不工作。输出:

^{pr2}$

两个。来自python脚本。测试.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]

Tags: 命令行src脚本密码passrootnndst
2条回答

在stio上直接读密码而不是直接读密码。以及:

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(来自subprocess docs)一起工作:

Using shell=True can be a security hazard. See the warning under Frequently Used Arguments for details.

相关问题 更多 >

    热门问题