2016-09-21 53 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) & 

這樣你就可以加密密碼。我希望它有幫助。

相關問題