1. 程式人生 > >如何在一臺虛擬機器上遠端訪問另一臺虛擬機器並設定郵件報警功能

如何在一臺虛擬機器上遠端訪問另一臺虛擬機器並設定郵件報警功能

linux當中的遠端控制在自動化運維中起到了很大的作用,你可以完成在一臺機器上對另一臺機器的操作以及監控,今天主要是用指令碼來實現對遠端虛擬機器CPU等資訊的監控。開始寫指令碼之前我們需要解決兩個問題

問題一

如何遠端連線到伺服器

這裡我們採用的是ssh進行連線 命令格式:

ssh -p $port [email protected]$ip 'cmd'  
或者 ssh -t [email protected] 'cmd'  
 $port : ssh連線埠號  
 $user: ssh連線使用者名稱  
 $ip:ssh連線的ip地址  
cmd:遠端伺服器需要執行的操作

採用命令執行過程中會讓輸入密碼,可以採用金鑰的方式省去輸入密碼這一步驟

在這裡插入圖片描述

如何設定金鑰

有機器A(192.168.1.155),B(192.168.1.181)。現想A通過ssh免密碼登入到B。 首先以root賬戶登陸為例。 1.在A機下生成公鑰/私鑰對。 [[email protected] ~]# ssh-keygen -t rsa -P ‘’ -P表示密碼,-P ‘’ 就表示空密碼,也可以不用-P引數,這樣就要三車回車,用-P就一次回車。 命令將在/root/.ssh目錄下面產生一對金鑰id_rsa和id_rsa.pub。 一般採用的ssh的rsa金鑰: id_rsa 私鑰 id_rsa.pub 公鑰 下述命令產生不同型別的金鑰 ssh-keygen -t dsa ssh-keygen -t rsa ssh-keygen -t rsa1

2.把A機下的/root/.ssh/id_rsa.pub 複製到B機的 /root/.ssh/authorized_keys檔案裡,先要在B機上建立好 /root/.ssh 這個目錄,用scp複製。

[[email protected] ~]# scp /root/.ssh/id_rsa.pub [email protected]:/root/.ssh/authorized_keys [email protected]’s password: id_rsa.pub 100% 223 0.2KB/s 00:00

由於還沒有免密碼登入的,所以要輸入一次B機的root密碼。

3.authorized_keys的許可權要是600!!!

[[email protected] ~]# chmod 600 /root/.ssh/authorized_keys

問題二 如何實現傳送郵件的功能

這裡使用mail實現傳送郵件的功能 下載mailx yum -y install mailx yum -y install sendmail 下載完成以後需要配置/etc/mail.rc檔案 vi /etc/mail.rc =在配置檔案中新增下面的資訊= set [email protected] 傳送端

set smtp-auth-password=qbwecjkddjhibfif 使用者郵箱的授權碼,可以在qq郵箱的設定>賬號中開啟

set smtp-auth=login

配置檔案設定完畢就可以傳送郵件了

引數 說明
-b address 指定密件副本的收信人地址
-c address 指定副本的收信人地址
-f [file] 讀取指定郵件檔案中的郵件
-i 忽略終端發出的資訊
-I 使用互動模式
-n 啟動時禁止讀取 /etc/mail.rc
-N 閱讀郵件時,不顯示郵件的標題
-s subject 指定郵件的主題
-t 要傳送的訊息應包含帶有 To:、Cc:、或 Bcc: 欄位的訊息頭,在命令列上指定的收件人將被忽略。
-u user 讀取指定使用者的郵件
-v 執行時,顯示詳細的資訊
-V 顯示版本資訊並退出

傳送郵件 1.標準輸入錄入郵件資訊

直接把當前 shell 當成編輯器來用,可以輸入正文,當郵件正文輸入完成後,需要按 Ctrl+D 結束輸入。

[[email protected] ~]# mail -s "郵件主題" [email protected]
hello  # 郵件正文
world  # 郵件正文
EOT  # 按 Ctrl+D

2.管道方式

[[email protected] ~]# echo “郵件正文” | mail -s “郵件主題” [email protected]

以檔案 file.txt 的內容為郵件正文傳送。

[[email protected] ~]# cat file.txt | mail -s “郵件主題” [email protected]

3.檔案重定向

以檔案 file.txt 的內容為郵件正文傳送。

[[email protected] ~]# mail -s “郵件主題” [email protected] < file.txt

注意點

我們在用163郵箱傳送郵件時如何郵件內容不合理會被163郵箱的反垃圾機制阻攔,導致郵件的傳送失敗,這時可以修改郵件內容或者換QQ郵箱進行傳送

指令碼檔案

#! /bin/bash
#獲取CPU等資訊的函式
info_get(){
cpuUse=`top -n 1 | awk -F '[ %]+' 'NR==3 {print $3}'` | awk -F '.' "{print $2}"
mem_total=`free -m | awk -F '[ :]+' 'NR==2{print $2}'`
mem_used=`free -m | awk -F '[ :]+' 'NR==2{print $3}'`
mem_used2=`awk 'BEGIN{printf "%.0f\n",('$mem_used'/'$mem_total')*100}'`
data_name="/dev/sda1"
disk_used=`df -h | grep $data_name | awk -F '[ %]+' '{print $5}'`
}
#進行連線的函式
connect()
{
ssh -t [email protected]$192.168.0.195
}
#傳送郵件的函式
send(){
connect
info_get
#設定判斷語句當Cpu等資訊達到所監控的值時傳送資訊
if [[ $cpuUse > 0.6 ]];then
echo "警告,你現在的CPU已經使用$cpuUse,請趕快處理" | mail -s "警告" [email protected] 
elif [[ $mem_used2 > 10 ]];then
echo "警告,你所監控的記憶體已經使用$mem_used2,請趕快處理" | mail -s "警告" [email protected] 

elif [[ disk_used > 80 ]];then
echo  "警告,你所監控的磁碟已經使用$disk_used,請趕快處理" | mail -s "警告" [email protected] 
else
echo "一切正常"
fi
}
send

總結

這個指令碼檔案是從一臺主機上執行指令碼檔案來實現對遠端liunx機器的監控,也可以用過在遠端執行指令碼檔案實現監控,具體方法還在研究