2016-09-21 18 views
1

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

所以我写了一个小小的bash脚本来处理。用户名和密码,并仍然能够做一个nohup的/不认路的传球这里是我的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

将证书存储在只有您的python进程可以读取的文件中的任何问题?这是需要授权令牌的命令行实用程序的工作方式,例如aws cli从'〜/ .aws/config'中读取 – Hardbyte

回答

0

您可以使用openssl加密您的密码。

例如:

echo $(openssl passwd -crypt mypassword) 

输出:

eXzWQlhzBJZ9. 

同样你可以把它作为 -

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

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

相关问题