
我想建立一個 shell 腳本,它將登入伺服器,從伺服器取得磁碟使用情況,透過電子郵件發送給我,然後從伺服器登出。另外,如果可能的話,每天都這樣做。這就是我所擁有的:
#!/usr/bin/bash
ssh -p 1111 [email protected]
CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
mail -s 'Disk Space Alert' [email protected] << EOF
Disk usage is at: $CURRENT%
EOF
fi
shell 腳本的名稱是 example.sh 當我執行它時,它不斷要求我輸入密碼,一旦我登錄,什麼事也不會發生。
答案1
首先,產生一個公鑰,用於無需密碼即可登入遠端系統:
ssh-keygen -t rsa -b 4096 -C "your_username"
這將在您的目錄中產生一個 4096 位元 RSA 金鑰,~/.ssh/
並以您的使用者名稱作為標籤。然後,將此新金鑰新增至您的 ssh-agent 中,以便在透過 SSH 連線時使用它。
ssh-agent -s
ssh-add ~/.ssh/id_rsa
如果您在密鑰產生期間設定了自訂名稱,請替換id_rsa
為該名稱。
現在,將您的公鑰內容複製到剪貼簿。
clip < ~/.ssh/id_rsa.pub
接下來,登入遠端伺服器並編輯遠端使用者的檔案。ssh -p YOURPORT [email protected]
authorized_keys
vim .ssh/autorized_keys
將剛複製的內容貼到剪貼簿。這允許從您的電腦到遠端主機的連接無需密碼,而是使用憑證(無論如何通常更安全)。
現在,您需要example-script.sh
在遠端主機的主目錄中建立腳本(確保chmod a+x example-script.sh
隨後將其設定為可執行檔)。
#!/usr/bin/env bash
CURRENT=$(df / | awk '/\// { print $5}' | sed 's/%//g')
mail -s 'Disk Space Alert' [email protected] << EOF
Disk usage is at: $CURRENT%
EOF
現在,在本機主目錄中建立腳本,local-script.sh
以便稍後輕鬆執行該命令(再次確保使其可執行)。
#!/usr/bin/env bash
ssh -P YOURPORT [email protected] ./example-script.sh
./local-script.sh
該腳本允許您從主目錄運行,只需一行即可運行遠端腳本。然後,您可以將其作為別名添加到您的.bashrc
文件中,以便您可以運行local-script
或您可能想要的任何其他別名。您也可以使用絕對路徑( /home/your_username/local-script.sh
) 來crontab
使其在每天的特定時間運行。
答案2
先解釋為什麼沒有任何反應,很可能是因為文法。您的 ssh 命令的形式為:ssh server
,這是當您只想登錄,然後以互動方式手動鍵入一些命令時。但是,如果您希望某些命令在登入後自動運行,您應該這樣做 : ssh server somecommand
,所以只somecommand
在下一行是行不通的。
好吧,如果您希望系統能夠隨時透過電子郵件發送磁碟空間訊息,同時支援計劃的電子郵件,我會推荐一個由三部分組成的系統:
- 伺服器上的一個腳本,用於獲取磁碟資訊和電子郵件邏輯,例如位於
/home/yourusername/script.sh
- crontab 運行 script.sh
- 對於您任意的、突發奇想的請求,您可以 ssh 並執行腳本
腳本文件
這是您放置在伺服器上的腳本,例如位於/home/yourusername/script.sh。
#!/bin/bash
s="Disk Space Alert: $(df / | grep / | awk '{ print $5}')"
mail -s $s [email protected]
# Feedback
echo $s
我刪除了,sed
因為它只是刪除了%
標誌,但後來您又將其添加回來,這似乎是 sed 的多餘使用,所以我刪除了它。
其次,我已經壓縮了磁碟使用資訊以適合主題行,如果這不起作用那麼您當然可以將其修改為原始形式,但讓每個人都知道無論哪種方式,以便我們可以了解是否有任何錯誤ETC
定時任務
在您的伺服器上編輯 crontab,例如 ssh 進入您的伺服器,然後繼續執行這些命令
$ crontab -e
你知道格式是
# m h dom mon dow command
所以每天早上8點
0 8 * * * /home/yourusername/script.sh
因此,只要您已經測試過該腳本並知道它可以發送電子郵件,那麼 crontab 就會運行該腳本並導致每天早上 8 點發送電子郵件
任意請求透過電子郵件發送磁碟訊息
你只需 ssh 但將腳本命令放在最後
ssh -p 1111 [email protected] /home/yourusername/script.sh
它使用 ssh 語法,ssh server somecommand
因此它會登入、執行任何命令並將結果傳回本機標準輸出。
因為它有回饋行,所以不僅應該發送電子郵件,而且您還可以看到該Disk Space Alert: ...
訊息,以便您至少可以立即得到腳本是否運行的回饋。