批量ssh登入,獲取作業系統、CPU、記憶體、硬碟資訊<shell>
阿新 • • 發佈:2018-11-23
說明:該指令碼讀取machine.txt檔案中的機器名,然後批量ssh登入,獲取每臺機器的作業系統,CPU,記憶體,硬碟等資訊。
使用方法:將檔案儲存為sh,chmod +x filename 為該sh檔案賦予執行許可權。
for line in `cat machine.txt` do echo $line "的資訊" echo "作業系統:" `ssh -ttq -o StrictHostKeyChecking=no $line /usr/bin/lsb_release -a |grep Description |awk -F : '{print $2}' |sed 's/^[ \t]*//g'` #echo "作業系統版本號:" `ssh -ttq -o StrictHostKeyChecking=no $line uname -m` echo "CPU型號:" `ssh -ttq -o StrictHostKeyChecking=no $line cat /proc/cpuinfo|grep 'model name' |uniq |awk -F : '{print $2}' |sed 's/^[ \t]*//g' |sed 's/ \+/ /g'` echo "物理CPU個數:" `ssh -ttq -o StrictHostKeyChecking=no $line cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l` echo "每個物理CPU上Core的個數:" `ssh -ttq -o StrictHostKeyChecking=no $line cat /proc/cpuinfo | grep "core id" | sort | uniq | wc -l` echo "邏輯CPU個數:" `ssh -ttq -o StrictHostKeyChecking=no $line cat /proc/cpuinfo | grep "processor" | sort | uniq | wc -l` echo "記憶體大小為:" `ssh -ttq -o StrictHostKeyChecking=no $line cat /proc/meminfo |grep MemTotal|awk '{print $2/1048576}'` "G" echo "硬碟個數:" `ssh -ttq -o StrictHostKeyChecking=no $line df -a|grep "/dev/sd"|awk '{print $1}'|cut -b 1-8|sort|uniq|wc -l` echo "硬碟大小為:" `ssh -ttq -o StrictHostKeyChecking=no $line df -k | grep -v "tmpfs" | awk 'NR>1&&NF>1{print $(NF-4)}' | awk -v total=0 '{total+=$1}END{printf "%.2f\n",total/1048576}'` echo "====================================================================================================" done
特殊說明:$line中為ssh的登入名,因為該處對ssh進行過改造,登入時無需密碼,因此可以直接ssh登入成功。如果未經改造,此處ssh需要進行改造。
提供兩個思路:
一、將客戶端的公鑰託管到要登入的ssh機器的/root/.ssh/authorized_keys中,即可利用公鑰和私鑰進行無祕鑰登入了。
二、except直譯器
這個直譯器實現了互動式任務的直譯器。主要包括以下命令:
spawn命令:
spawn command
命令會fork一個子程序去執行command命令,然後在此子程序中執行後面的命令;
在ssh自動登陸指令碼中,我們使用 spawn ssh
,fork一個子程序執行ssh登陸命令; [email protected]_str
expect命令:
expect命令是expect直譯器的關鍵命令,它的一般用法為 expect "string"
,即期望獲取到string字串,可在在string字串裡使用 * 等萬用字元;
string與命令列返回的資訊匹配後,expect會立刻向下執行指令碼;
set timeout命令:
set timeout n
命令將expect命令的等待超時時間設定為n秒,在n秒內還沒有獲取到其期待的命令,expect 為false,指令碼會繼續向下執行;
send命令:
send命令的一般用法為 send "string"
string
後面新增上 \r
表示輸入回車;
interact命令:
interact命令很簡單,執行到此命令時,指令碼fork的子程序會將操作權交給使用者,允許使用者與當前shell進行互動;
#!/usr/bin/expect // 指定shebang set timeout 3 // 設定超時時間為3秒 spawn ssh [email protected]***.***.*** // fork一個子程序執行ssh命令 expect "*password*" // 期待匹配到 '[email protected]_string's password:' send "my_password\r" // 向命令列輸入密碼並回車 send "sudo -s\r" send "cd /data/logs\r" // 幫我切換到常用的工作目錄 interact // 允許使用者與命令列互動