【问题标题】:Run program from command line what prompts password and automatically provide password for it (cmd.exe, python)从命令行运行程序提示密码并自动为其提供密码(cmd.exe,python)
【发布时间】:2015-05-14 13:37:40
【问题描述】:

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

> 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 脚本。测试.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]

【问题讨论】:

    标签: python windows cmd


    【解决方案1】:

    面向安全的程序在直接 io 上要求输入密码而不是读取标准输入是很常见的。并且作为:

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

    问了密码,我猜是csrsync直接从控制台读取的。

    在这种情况下,如果没有一些工作和低级编程,您将无法实现自动化,因为您必须模拟键盘操作。相反,您应该搜索文档,因为它看起来像使用底层 ssh,它很可能接受公钥对。如果它接受一个没有密码的密码,你应该能够自动化它。

    【讨论】:

    • 使用 Python 的 ctypes 模块调用WriteConsoleInput 发送键盘输入相对容易。我今天刚刚做了这个作为测试 getpass 模块的示例。但我同意使用公钥/私钥对是一种更简单、更安全的自动化方式。
    【解决方案2】:

    尝试在标准输入字符串 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):

    使用shell=True 可能存在安全隐患。有关详细信息,请参阅Frequently Used Arguments 下的警告。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-10
      • 2013-09-30
      • 2023-03-26
      • 2011-06-18
      • 1970-01-01
      相关资源
      最近更新 更多