建立 shell 腳本來登入伺服器並透過電子郵件發送磁碟使用情況

建立 shell 腳本來登入伺服器並透過電子郵件發送磁碟使用情況

我想建立一個 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: ...訊息,以便您至少可以立即得到腳本是否運行的回饋。

相關內容