2010-12-10 112 views
10

我正在写一个使用命令行实用程序(propietary因此它不能被修改)来完成其部分工作的python应用程序。问题是,我必须将密码作为命令行参数传递给工具,这个工具很容易被任何用户做'ps ax'。我怎样才能将密码安全地从python(或shell脚本)发送到命令行工具?发送密码到命令行工具

+0

这很大程度上取决于您要调用的工具如何接受密码。例如,'ssh'接受它从标准输入,如果它是一个终端。 – khachik 2010-12-10 11:09:47

+0

'sudo'会有什么用处? – 2012-10-23 16:31:38

回答

2

如果密码只在命令行上被接受,那么您几乎不走运。你确定没有选择以另一种方式发送密码吗?如果您可以通过流程stdin发送它,则可以通过管道与它通话,并以此方式安全地发送密码。

+0

我会研究它,但我不确定是否有可能。 – theprole 2010-12-12 18:44:07

+0

您确定通过管道将密码传递到程序是安全的吗?看到我的新问题http://stackoverflow.com/questions/6321353/securely-passing-password-to-openssl-via-stdin也许你可以在那里抓点。 – Enchilada 2011-06-12 10:02:02

5

如果应用程序有一些交互模式,可以使用类似pyexpect之类的东西。

如果它只接受命令行中的密码,应用程序被设计为易受'ps ax'影响,您如何克服原有的不良设计?它是专有的,投诉应该归罪于有罪的Hauthor。

0

通过加密密码参数并传递加密密码,您可以获得更高的安全性,并且程序可以解密它。至少不会存在明文密码。当通过另一个进程启动一个进程并传递参数时,我使用了这个方法。尽管如此,你可能并不可行。

0

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

0

可以强制内联外壳包装像如下

somecommand --password=$(echo "Enter Password: " >&2;read -s PASSWORD;echo $PASSWORD) 

密码输入将执行它

密码不会出现在你的shell历史

之前填充命令却会出现在你的'ps'输出中

0

bash:

command_asking_for_password < <(command_that_prints_a_password; echo -n "\r") 
+0

更好地使用'printf' - 当给定一个使用反斜杠的格式字符串时'echo'的行为 - 或者对于'-n'参数 - 是[未定义的POSIX](http:// pubs .opengroup.org/onlinepubs/9699919799/utilities/echo.html),并且在常规shell之间的实践中有所不同(ash和dash的行为与默认配置不同,bash与启用了xpg_echo标志的bash不同) )。 – 2017-11-14 23:56:06