實作連線至一網段環境後再經由此網段線路連線至其他網段主機

Msx Wu
WU TH Max
Jul 22, 2021

--

架構圖

實習工作期間碰到的需求為:
從User端連線至Jenkins lab這台主機
Jenkins lab這網段主要有兩個目的

  1. 可透過此網段連線至另一個公司機器做Controller的管理
  2. 透過Jenkins環境能夠打通連線到另一個網段,這個網段才是之後真正需要作多台AP操作環境的地方

簡略來說,ssh connect到Jenkins lab,接著再從Jenkins lab再ssh connect到AP環境中

方法一. 透過python paramiko做SSH Connection再下Command

一開始的想法是直接在Jenkins上部屬一隻py檔
讓他直接去跑連線的動作
因此有了以下開發

有兩個主要的function 在做指令時都會用到
第一個是waitRecv,因為recv這個用法常常會抓結果失常
所以這邊做了個檢查是否為recv_ready的判斷

第二個則是snedCmd,顧名思義送出指令
同時送出指令後call上述的wait function
接著直接把shell目前結果print出來

ssh=paramiko.SSHClien()開始則是主要邏輯區
包含開啟ssh連接、設定等
第一個ssh connect是連結到Jenkins/test engine
接下來打開了一個session,為後面要寫command做通道
因此接下來invoke_shell
然後用剛剛定義好的sendCmd方式來連線到AP Server

方法二. 透過Linux Expect達成

一開始因為比較熟悉python才會想到用python來做
但實際用了paramiko發現 只是做個簡單ssh連線還是蠻麻煩
開發或是維護上更是不容易(因為是QA Team應以可讀性、可維護為主)
因此上司最後決定以Expect來做
整個流程被簡化至非常簡單
不用引任何函示庫 加上因為最後是丟在Jenkins上面跑
可以直接用shell script觸發expect腳本

首先透過"spawn"開啟一個ssh程序
過程中透過”expect”方式 從程序接受String
再透過”send”傳送String到程序
就是使用expect, send不斷對機器做io的動作

--

--