我們在Linux集羣系統使用中,偶爾會碰到需要批量處理每個系統的情況,比如ssh的登陸運行命令,或者scp的文件複製,這些只需要在shell腳本批量運行各個IP即可,但ssh,scp需要交互式輸密碼,也就是說你仍然需要一個個的輸密碼,過於機械與麻煩
爲了解決這種情況,常用的有三種方法
- 各個IP配置key文件,達到網絡共享服務器之間免密操作
- 用sshpass命令,免交互式輸密碼
- 用expect命令,該命令比sshpass功能更加強大,但使用起來稍顯複雜
這裏我們詳細介紹下sshpass命令的使用
安裝
該命令非系統內置命令,需要我們自行安裝使用
- 在線安裝
yum install sshpass
- 離線安裝
免費提供一個安裝包,不用感謝,十萬訪問量送禮物,哈哈 鏈接:https://pan.baidu.com/s/1lOYetlVlgYGd_6Ye7tm1ZA
提取碼:2x8j
下載安裝好,把該文件拷貝到服務器中,解壓,安裝,測試使用,命令如下
# xxxx爲文件名
tar -xvf xxxx.tar.gz
cd xxxx
./configure
make
make install
輸入sshpass -h 測試使用是否成功
使用
sshpass -p 'password' 輸入密碼後即可後跟命令,如下,不用再另外單輸密碼,但存在泄露密碼風險
sshpass -p 'password' ssh [email protected]
腳本測試
# scp 也可以類似下面使用
iplist="1.1.1.1 2.2.2.2 3.3.3.3"
for ip1 in ${iplist};do
ssh -p 'password' ssh root@${ip1} << EOF
cd /u01/test
touch test.txt
exit
EOF
done