iTerm2結合 expect 腳本實現 ssh 登陸跳板機後登陸指定服務器

痛點

通常狀況下,公司全部的服務器都在內網,公網訪問、管理服務器都要先經過登陸一臺跳板機,而後再由跳板機登陸到相應的服務器進行操做,跳板機與服務器的鏈接都是內網地址git

一般狀況下,咱們都是經過兩次ssh,第一次本地機器登陸跳板機,第二次在跳板機登陸指定機器,須要輸入兩次密碼,容易輸錯github

後端碼農天天要無數次登陸各類機器,若是能經過工具自動化,每次能省半分鐘,而且心情會愉悅不少,下面來進行實戰golang

expect 腳本

#!/usr/bin/expect
set host [lindex $argv 0]

# 設置一個變量,傳入的參數,0 表示第一個參數,同時也爲了複用,畢竟不僅是管理一臺服務器

set TERMSERV 跳板機IP
set USER 跳板機用戶名
set PASSWORD 跳板機密碼
set UATUN 內網服務器用戶名
set UATPWD 內網服務器密碼

# 登陸跳板機
spawn ssh -l $USER $TERMSERV

# expect是expect環境的一個內部命令,判斷上一個指令輸入以後的獲得輸出結果是否包含""雙引號裏的字符串,好比後面的"*password:*",表示上一個輸出結果包含password:*通配符表示先後能夠是任意字符

#相似於編程中的 switch語句,exp_continue至關於 continue
expect {
        "yes/no" {send "yes\r";exp_continue;}
         "*password:*" { send "$PASSWORD\r" }
        }
# 登陸內網
expect "*$USER@*" {send "ssh -l $UATUN $host\r"}
expect {
        "yes/no" {send "yes\r";exp_continue;}
        "*password:*" { send "$UATPWD\r" }
        }
interact
# 執行完成後保持交互狀態,把控制權交給控制檯
  • 將腳本保存成一個文件,例如 server.exp
  • 可執行權限,chmod +x server.exp

配置 iTerm2

  • 進入配置頁面, Profiles -> Open Profiles -> Edit Profiles
  • 配置如圖所示

image


image

send text at start: [expect腳本路徑] [參數0] [參數1] ... 
以空格分割

大功告成

到此爲止,已完成全部準備工做,此時再進入指定機器,只須要三步面試

  1. 打開 iTerm2
  2. 快捷鍵 Command+o 打開 Profiles 面板
  3. 選中某個 profile 單擊,就直接進入目標機器了,開始揮灑方遒吧!

舒適提示

  • 之因此在expect 腳本中設置了一個參數,是爲了複用,要進入別的機器,複用同一個 .exp腳本,添加一個新的 profile 便可
  • exp 腳本能夠多個參數,達到更多場景下複用,具體又童鞋本身考量
  • 也能夠把exp腳本當作sh腳本同樣執行,好比 ./test-server.exp in-test-server-goapi-1,這樣能夠沒必要要配置 profile

GitHub

本文爲原創文章,轉載註明出處,歡迎掃碼關注公衆號 樓蘭 或者網站 https://lovecoding.club,第一時間看後續精彩文章,以爲好的話,順手分享到朋友圈吧,感謝支持。

image

相關文章
相關標籤/搜索