最近在mac中折騰ssh自動登錄的問題,不自動登錄每次輸入命令太痛苦了,采取的方案是expect腳本的方式,其實選擇這種方案而不是在遠程服務器上保存key的方式主要是因為公司限制了在跳板機上保存私有數據的權限,如果想了解如何不輸入密碼登錄遠程機器的原理,請看這篇博客
當然,OS X上的終端可以使用iterm2,這樣配置后便利性不比$99的secureCRT差
首先介紹下不通過跳板機進行登錄的方式,準備:
1. 寫一個expect腳本
```
#!/usr/bin/expect
set timeout 30
spawn ssh [lindex $argv 0]@[lindex $argv 1]
expect {
"(yes/no)?"
{send "yes\n";exp_continue}
"password:"
{send "[lindex $argv 2]\n"}
}
interact
```
該腳本計較簡單,需要三個參數,第一個參數是遠程用戶名,第二個參數是遠程地址,第三個參數是密碼.
2. 將expect腳本copy到$PATH下(例如/usr/local/bin),并給予權限
```
chmod 775 expect
```
3. mac 環境變量 path
3.1 單用戶設置
```
~/.bash_profile (任意一個文件中添加用戶級環境變量)
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
```
4. 在iterm2中設置登錄命令為1中的腳本,用command+o的方式呼出profiles,點擊Edit Profiles

上面是已配置的遠程登錄機列表,雙擊可以自動登錄

如上圖配好后,即可自動登錄
下面再說下有跳板機的情況
俺公司的跳板機策略如下,不同公司的環境不一樣,也許某些同學可以進行參考
1.跳板機上不能存放任何文件,/tmp下可以方臨時文件,每天會定時清掉
2.copy文件方向只能是local->跳板機->remote的方向,即local可以push/pull跳板機上的文件,跳板機可以push/pull遠程上的文件
3.向跳板機登錄前需要通過郵件/短信的方式獲取passcode,這是除密碼之外的額外的驗證方式
其實跳板機的自動遠程登錄與非跳板機的差異在expect腳本的編寫上,其他的照搬即可,那這里就直接把代碼貼出來就行了