Python 向命令行工具发送密码

Python 向命令行工具发送密码,python,bash,shell,Python,Bash,Shell,我正在编写一个python应用程序,它使用一个命令行实用程序(Propitary,因此无法修改)来完成部分工作。问题是,我必须将密码作为命令行参数传递给该工具,任何执行“ps ax”的用户都很容易看到该工具。如何从python(或shell脚本)中安全地将密码发送到命令行工具?如果密码只在命令行上被接受,那么您就太倒霉了。您是否绝对确定没有其他方式发送密码的选项?如果您可以通过进程的stdin发送密码,您可以通过管道与它对话,并以这种方式安全地发送密码。如果应用程序具有某种交互模式,您可以使用类

我正在编写一个python应用程序,它使用一个命令行实用程序(Propitary,因此无法修改)来完成部分工作。问题是,我必须将密码作为命令行参数传递给该工具,任何执行“ps ax”的用户都很容易看到该工具。如何从python(或shell脚本)中安全地将密码发送到命令行工具?

如果密码只在命令行上被接受,那么您就太倒霉了。您是否绝对确定没有其他方式发送密码的选项?如果您可以通过进程的
stdin
发送密码,您可以通过管道与它对话,并以这种方式安全地发送密码。

如果应用程序具有某种交互模式,您可以使用类似的方式


如果它只接受命令行上的密码,那么应用程序被设计为易受“ps ax”攻击,您希望如何克服最初的糟糕设计?这是正确的,投诉应该交给有罪的^H^H^H^H^H^hautor。

您可以通过使用加密密码参数并传递加密密码来获得更高的安全性,程序可以对其进行解密。至少不会有明文密码四处浮动。我在通过另一个进程启动一个进程并传递参数时使用了这个方法。但在你的情况下可能不可行

编写另一个python脚本,使用
getpass.getpass()
从命令提示符接受密码,并将其存储在变量中。然后从脚本调用该命令,该变量的参数为password。

您可以强制使用内联shell包装器,如下所示

somecommand --password=$(echo "Enter Password: " >&2;read -s PASSWORD;echo $PASSWORD)
密码条目将在执行命令之前填充该命令

密码不会出现在shell历史记录中


但是它将出现在您的“ps”输出中

在bash中如何:

command_asking_for_password < <(command_that_prints_a_password; printf "\r")

command\u asking\u for\u password<这在很大程度上取决于您要调用的工具接受密码的方式。例如,
ssh
从stdin接受它,如果它是终端的话。我会调查一下,但我不确定这是否可行。你确定通过管道将密码传递到程序是安全的吗?看看我的新问题,也许你可以抓住一些要点。最好使用
printf
——当给定一个使用反斜杠的格式字符串时,
echo
的行为——或者,就此而言,
-n
参数——是,并且在实践中在常见shell之间有所不同(ash和dash的行为不同于具有默认配置的bash,后者不同于启用了
xpg_echo
标志的bash)。需要更多的引号。
--password=“$(…;echo“$password”)”
如果您不希望密码带有空格,或者可以将其解释为全局表达式。(最好使用
printf'%s\n'$PASSWORD'
而不是
echo
;否则
-n
消失,带有文字反斜杠的密码具有未定义的行为,等等)。