在Python

时间:2016-09-21 10:12:40

标签: python

我想运行一个每X秒/分钟ping一次服务器的小脚本,如果没有得到预期的响应,请发送一封电子邮件到指定的电子邮件地址,通知我服务器已关闭。 显然,我想在一些带有nohup选项的服务器上运行此脚本,以便在断开连接时保持活动状态。我正在使用smtplib(https://docs.python.org/3.5/library/smtplib.html)发送电子邮件,一切都很棒。但是因为我不想在脚本中硬编码我的电子邮件帐户的密码,所以我想以交互方式将它提供给python脚本。这就是我没有让它与nohup选项结合使用的地方。 (例如,运行nohup pingServer.py -u <username> -p <password> &似乎有点取消nohup / background的想法。在指定密码然后断开终端后,该过程似乎仍然停止。

所以我写了一个关于这个的小bash脚本来处理用户名和密码的传递,并且仍然能够以nohup / disown方式执行。这是我的bash代码:

#!/bin/bash

read -p "Please enter sender email: " sender
stty -echo
read -p "Plese enter sender password: " passw; echo
stty echo

echo "INFO: Starting pingServer.py now."
echo
python pingServer.py  -u $sender -p $passw &
disown

哪个效果很好,完全符合我的要求。 直到我做了一些完整性检查时,我注意到ps -ax | grep py的输出给了我:

27489 pts/4 S 0:00 python pingServer.py -u <username> -p <password> 我的电子邮件和密码都显示在终端窗口的纯文本中。看到该进程在服务器上运行,这绝对不是我想要的。

有没有人对如何解决这个问题有一些想法? 我很喜欢写这个小剧本并喜欢小小的挑战,因此以这种方式做到了。但是,当服务器/服务停机时,可能有更好的方法来实现这种小型通知服务。

如果有人能给我一些指示,告诉我如何以明文方式显示我的密码并以安全的方式将其传递给python脚本并且没有挂断,这将是很好的(即以编程方式显示/设置在完成交互式提示之后,python中的nohup,尽管它当然很可能是因为这根本不可能)。或者也许可以用一些混淆/加密的方式将密码传递给python?

或者,任何有关如何实现相同的提示(例如,当服务器未返回预期的响应时收到电子邮件)也会受到欢迎(尽管自己做/自己工作当然要冷却得多:) )

1 个答案:

答案 0 :(得分:0)

您可以使用openssl加密密码。

例如:

echo $(openssl passwd -crypt mypassword)

输出:

eXzWQlhzBJZ9.

同样,您可以将其作为 -

nohup pingServer.py -u <username> -p $(openssl passwd -crypt mypassword) &

这样您就可以加密密码了。我希望它有所帮助。