linux(十三)shell腳本實(shí)戰(zhàn)-遠(yuǎn)程登錄服務(wù)器自動(dòng)輸入密碼

shell script 是個(gè)很重要的東西,下面就以一個(gè)例子介紹下.

# showname.sh

# 一定要指明你所使用的shell,因?yàn)椴煌膕hell是有差別的
#! /bin/bash

# 這里寫(xiě)一些和腳本相關(guān)的注釋,例如功能,創(chuàng)建時(shí)間,作者.

# 告知主要環(huán)境變量的位置以便使用
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin

export PATH

read -p "input your first name: " firstname
read -p "input your last name: " lastname
echo -e "\n Your name is : ${firstname} ${lastname}"

實(shí)戰(zhàn): 自動(dòng)登陸遠(yuǎn)程服務(wù)器腳本

有臺(tái)服務(wù)器,沒(méi)有做密匙驗(yàn)證,每次登陸服務(wù)器都要輸入密碼,很麻煩,想使用shell script腳本登陸.

準(zhǔn)備工作

  1. 安裝expect(本地,root權(quán)限下),
apt-get install expect

或者

yum install expect

編寫(xiě)腳本(user模式)

remote.sh

# 導(dǎo)入expect,以便使用spawn expect等命令
#! /usr/bin/expect

# 設(shè)置超時(shí)限制
set timeout 300
# 1
spawn ssh [-p 端口號(hào)] root@你的服務(wù)器地址
# 2
expect "*password:"
# 3
send "password\r"
# 4
interact

編寫(xiě)結(jié)束之后(root權(quán)限下)

chmod u+x remote.sh

給它執(zhí)行權(quán)限

下面講解一下

  1. 只有使用spawn啟動(dòng)的進(jìn)程才能被expect和send等命令捕捉到,這里用spawn啟動(dòng)ssh進(jìn)程來(lái)進(jìn)行后面的交互
  2. expect用來(lái)接收進(jìn)程的反饋,即expect想要得要一個(gè)以"password:"結(jié)尾的字符串,滿(mǎn)足條件后才會(huì)進(jìn)行下一步.我們知道,當(dāng)我們使用ssh登陸到服務(wù)器,,會(huì)提示我們輸入密碼,而expect就是用來(lái)判斷這個(gè)提示字符串的.
  3. 當(dāng)接收到輸入密碼提示后,發(fā)送密碼.\r用來(lái)結(jié)束輸入
  4. 允許用戶(hù)進(jìn)行交互,如果不加它,連接成功后會(huì)立刻關(guān)閉.我的理解是這樣的,如果不加interact,3運(yùn)行結(jié)束后腳本結(jié)束,spawn也就結(jié)束了,那由它啟動(dòng)的進(jìn)程ssh也要結(jié)束,加入interact后,就允許用戶(hù)進(jìn)行輸入,什么時(shí)候用戶(hù)結(jié)束輸入,腳本就真正運(yùn)行到終點(diǎn),結(jié)束.

如果進(jìn)行變量運(yùn)算,請(qǐng)按照這樣的格式

var=$((${var1}+${var2}))

確保外層有兩層括號(hào)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容