使用命令行登陸遠程服務器一般需要ip地址以及登陸密碼等,每次都手動輸很不方便,expect可以滿足自動輸入密碼。下面是詳細的介紹:
首先安裝expect:
我用的是ubuntu14.04,使用
sudo apt-get install expect
即可安裝然後使用
which expect
來查看expert的路徑,我的路徑是/usr/bin/expect
然後編寫腳本:
以
198.175.102.32:10000
爲例,賬號爲Team002,密碼爲××××××使用
vim connect.sh
新建腳本
下面是shell腳本的代碼:
#!/usr/bin/expect
set timeout 30
spawn ssh Team002@198.175.102.32 -p 10000
expect "password:"
send "××××××\r"
interact
然後修改權限:
保存退出,使用
sudo chmod +x connect.sh
將connect.sh文件變爲可執行文件>
下面運行腳本:
使用
./connect.sh
即可運行,運行結果見下圖:
可以看到,這裏自動連接服務器並輸入密碼,登陸成功
最後是代碼的介紹
第一行
#!/usr/bin/expect
中的/usr/bin/expect
爲which expect
之後的路徑第二行
set timeout 30
是設置第四行等待時間最長爲30s第三行
spawn ssh [email protected] -p 10000
是使用spawn來執行ssh [email protected] -p 10000
這條命令,其中Team002是賬號,198.175.102.32爲IP地址,10000爲端口號第四行
expect "password:"
是等待終端輸出中的字符串中是否包含password:
,如果包含,執行下一行,否則等待超過第二行設置的30s之後繼續執行下一行第五行
send "××××××\r"
用來實現自動輸入密碼,示例密碼爲xxxxxx最後一行
interactr"
的作用是執行完成後保持交互狀態,把控制權交給控制檯,這個時候就可以手工操作了。