我想运行一个每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?
或者,任何有关如何实现相同的提示(例如,当服务器未返回预期的响应时收到电子邮件)也会受到欢迎(尽管自己做/自己工作当然要冷却得多:) )
答案 0 :(得分:0)
您可以使用openssl加密密码。
例如:
echo $(openssl passwd -crypt mypassword)
输出:
eXzWQlhzBJZ9.
同样,您可以将其作为 -
nohup pingServer.py -u <username> -p $(openssl passwd -crypt mypassword) &
这样您就可以加密密码了。我希望它有所帮助。