1. 程式人生 > >自動登入linux伺服器指令碼

自動登入linux伺服器指令碼

背景

在伺服器上進行開發時,往往需要進行密碼登入,甚至有的需要先登入堡壘機,再登入開發機,輸入過程較為繁瑣,因此考慮將命令寫成指令碼的形式自動化登入。

方法

ssh登入是一個互動的過程,且沒有特定的引數指定密碼的輸入方式,因而不能用管道、重定向的方式實現。這種情況可以使用expect包進行自動登入功能的實現。
expect是一個用來處理人與程式互動的包,可以將互動過程用程式實現,適用於做ssh自動登入。可以使用whereis命令檢視是否安裝了expect,如果沒有的話,可以自行使用包管理工具進行安裝。
自動登入指令碼的編寫如下:

#!/bin/expect  
set timeout 20
spawn ssh username@host_name:port expect "password:" send "password\n" interact

第一行註釋指定了使用expect執行,第二行設定超時時間為20秒,第三行spawn為expect執行命令的關鍵字,第四行expect表示互動獲取的內容是否包含”password:”字串,第五行表示將輸入內容傳送過去(加了個\n表示回車),最後一行,interact代表執行完留在遠端控制檯,不加這句執行完後返回本地控制檯。
將這個指令碼命名存在本地,在儲存的路徑下,執行expect cmd_file_name即可實現自動登入伺服器。