我的小小實驗室之實現最簡單的跳轉

  • 2019 年 12 月 26 日
  • 筆記

需求:由於工作需要,我自己的工作站上搭建有很多套實驗環境,而在某種特定場景下,我需要通過默認連接的終端能隨時跳轉切換到其他環境下臨時測試使用,因為只有我自己用,無需引入複雜的跳轉機系統,也不需要審計。 環境:均為Linux伺服器 實現:我想通過最簡單的一些運維知識,搭建一套最簡易的跳轉程式,提升自己的工作效率。

1.梳理有跳轉需求的環境資訊

首先我默認連接的環境本身就是一套Oracle環境,默認也是以oracle用戶連接的,IP地址為192.168.1.61。先梳理出目前所有需要納入跳轉清單的實驗環境IP地址: 這裡我編輯 /home/oracle/jump_server/server_list 文件,內容如下:

Oracle:          Oracle 9i:                  9 -> 192.168.1.9            Oracle 10g:                  10 -> 192.168.1.10            Oracle 11g:                  11 -> 192.168.1.11            Oracle 10g RAC:                  171 -> 192.168.1.171                  173 -> 192.168.1.173            Oracle 11g RAC:                  61 -> 192.168.1.61                  63 -> 192.168.1.63            Oracle 11g RAC(xData):                  107 -> 192.168.1.107                  108 -> 192.168.1.108                  109 -> 192.168.1.109            Oracle EM 13c(12.1.0.2 RAC):                  111 -> 192.168.1.111                  112 -> 192.168.1.112            Oracle 19c RAC:                  193 -> 192.168.1.193                  195 -> 192.168.1.195  MySQL & PostgreSQL:          99 -> 192.168.1.99

可以看到清楚的描述了環境的概要資訊和對應IP地址。

2.加入用戶的環境變數

編輯環境變數的配置文件,增加內容如下: vi ~/.bash_profile

###################  ##  跳轉主機列表  ##  ###################  alias j='cat /home/oracle/jump_server/server_list'  # Alias for my env:  alias 9='ssh 192.168.1.9'  alias 10='ssh 192.168.1.10'  alias 11='ssh 192.168.1.11'  alias 171='ssh 192.168.1.171'  alias 173='ssh 192.168.1.173'  alias 61='ssh 192.168.1.61'  alias 63='ssh 192.168.1.63'  alias 107='ssh 192.168.1.107'  alias 108='ssh 192.168.1.108'  alias 109='ssh 192.168.1.109'  alias 111='ssh 192.168.1.111'  alias 112='ssh 192.168.1.112'  alias 193='ssh 192.168.1.193'  alias 195='ssh 192.168.1.195'  alias 99='ssh [email protected]'

3.配置ssh無密碼登陸

這點我有考慮過是否有必要?是否因配置了ssh無密碼登陸會容易產生誤操作?但結合自己的需求,在個人測試環境中還是需要這樣的功能方便提升效率的。 配置/etc/hosts文件,添加: vi /etc/hosts

#My Oracle Server  192.168.1.9     DB9  192.168.1.10    DB10  192.168.1.11    DB11  192.168.1.61    DB61  192.168.1.63    DB63  192.168.1.171   DB171  192.168.1.173   DB173  192.168.1.107   DB107  192.168.1.108   DB108  192.168.1.109   DB109  192.168.1.111   DB111  192.168.1.112   DB112  192.168.1.193   DB193  192.168.1.195   DB195  192.168.1.99    DB99

這裡可參考我之前的隨筆:

上傳cluster開頭的2個腳本之後,配置環境變數,增加NODE_LIST變數值:

#NODE_LIST:  export NODE_LIST='DB9 DB10 DB11 DB61 DB63 DB171 DB173 DB107 DB108 DB109 DB111 DB112 DB193 DB195 DB99'

清除ssh互信的當前所有配置資訊(根據情況選做):

cluster_run_all_nodes "hostname; rm -rf ~/.ssh"  rm -rf ~/.ssh

3.1 使用cluster_run_all_nodes腳本,快速在各節點ssh-keygen生成RSA密鑰和公鑰

cluster_run_all_nodes "hostname; ssh-keygen -q -t rsa  -N "" -f  ~/.ssh/id_rsa"

3.2 我需要使用shell結合for循環遍曆數組,如下:

IP_NET="192.168.1."  a=(9 10 11 61 63 171 173 107 108 109 111 112 193 195 99)  for i in ${a[@]}  do  ssh $IP_NET$i cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys  echo Summarize ssh info from $IP_NET$i into a single file.  done

3.3 安全性,分發確認無誤:

chmod 600 ~/.ssh/authorized_keys  cluster_copy_all_nodes ~/.ssh/authorized_keys ~/.ssh/  cluster_run_all_nodes "hostname; date"

若配置成功,就不需要輸入密碼即可執行完成:

[oracle@jystdrac1 ~]$ cluster_run_all_nodes "hostname; date"  db09  Wed Dec 25 23:58:31 CST 2019  db10  Wed Dec 25 23:58:42 CST 2019  OEL-ASM  Wed Dec 25 23:58:28 CST 2019  jystdrac1  Wed Dec 25 23:58:47 CST 2019  jystdrac2  Wed Dec 25 23:58:48 CST 2019  rac1-server  Wed Dec 25 23:50:24 CST 2019  rac2-server  Wed Dec 25 23:50:47 CST 2019  db01  Wed Dec 25 23:58:48 CST 2019  db02  Wed Dec 25 23:58:48 CST 2019  db03  Wed Dec 25 23:58:49 CST 2019  oemapp1  Wed Dec 25 23:58:42 CST 2019  oemapp2  Wed Dec 25 23:58:44 CST 2019  db193  Wed Dec 25 23:56:53 CST 2019  db195  Wed Dec 25 23:56:54 CST 2019  alfred  Wed Dec 25 23:56:38 CST 2019

此外,特別需要注意99這台機器由於安裝多款資料庫產品,我為了方便是跳轉到root用戶的,這樣切換到其他任意用戶不需要輸入密碼,至於ssh互信這裡需要特殊配置下,只需將99上的root用戶輸入ssh-keygen生成的id_rsa.pub文件內容追加到61上oracle用戶下的authorized_keys,然後將61的這個文件再同步回99上root用戶下authorized_keys即可。

4.展示跳轉機使用效果

最後來看下跳轉機實際使用的效果:

4.1 輸入j顯示可以跳轉的伺服器資訊:

[oracle@jystdrac1 ~]$ j  Oracle:          Oracle 9i:                  9 -> 192.168.1.9            Oracle 10g:                  10 -> 192.168.1.10            Oracle 11g:                  11 -> 192.168.1.11            Oracle 10g RAC:                  171 -> 192.168.1.171                  173 -> 192.168.1.173            Oracle 11g RAC:                  61 -> 192.168.1.61                  63 -> 192.168.1.63            Oracle 11g RAC(xData):                  107 -> 192.168.1.107                  108 -> 192.168.1.108                  109 -> 192.168.1.109            Oracle EM 13c(12.1.0.2 RAC):                  111 -> 192.168.1.111                  112 -> 192.168.1.112            Oracle 19c RAC:                  193 -> 192.168.1.193                  195 -> 192.168.1.195  MySQL & PostgreSQL:          99 -> 192.168.1.99

4.2 選擇輸入對應主機即可實現跳轉: 比如選擇輸入107,即可跳轉到192.168.1.107的主機:

[oracle@jystdrac1 ~]$ 107  Last login: Wed Dec 25 22:31:16 2019 from db02  [oracle@db01 ~]$ ps -ef|grep pmon  grid     19592     1  0 Dec22 ?        00:00:52 asm_pmon_+ASM1  oracle   20315 20293  0 00:02 pts/0    00:00:00 grep --color=auto pmon  oracle   21339     1  0 Dec22 ?        00:00:58 ora_pmon_orcl1  [oracle@db01 ~]$ exit  logout  Connection to 192.168.1.107 closed.

比如選擇輸入193,即可跳轉到192.168.1.193的主機:

[oracle@jystdrac1 ~]$ 193  Last login: Wed Dec 25 22:30:01 2019 from 192.168.1.61  [oracle@db193 ~]$ ps -ef|grep pmon  grid     16918     1  0 Nov07 ?        00:05:33 asm_pmon_+ASM1  oracle   17329     1  0 Nov07 ?        00:06:51 ora_pmon_jydb1  oracle   28698 28674  0 00:00 pts/0    00:00:00 grep --color=auto pmon  [oracle@db193 ~]$ exit  logout  Connection to 192.168.1.193 closed.

比如選擇輸入99,即可跳轉到192.168.1.99的主機(因為之前特殊處理,所以可成功跳轉到root用戶):

[oracle@jystdrac1 ~]$ 99  Last login: Thu Dec 26 00:24:57 2019 from 192.168.1.61  [root@alfred ~]# ps -ef|grep postgres  postgres 17659     1  0 Dec23 ?        00:00:18 /usr/pgsql-10/bin/postmaster -D /var/lib/pgsql/10/data/  postgres 17662 17659  0 Dec23 ?        00:00:00 postgres: logger process  postgres 17664 17659  0 Dec23 ?        00:00:00 postgres: checkpointer process  postgres 17665 17659  0 Dec23 ?        00:00:04 postgres: writer process  postgres 17666 17659  0 Dec23 ?        00:00:05 postgres: wal writer process  postgres 17667 17659  0 Dec23 ?        00:00:15 postgres: autovacuum launcher process  postgres 17668 17659  0 Dec23 ?        00:00:32 postgres: stats collector process  postgres 17669 17659  0 Dec23 ?        00:00:00 postgres: bgworker: logical replication launcher  root     19218 19196  0 00:28 pts/0    00:00:00 grep --color=auto postgres  [root@alfred ~]# su - postgres  Last login: Tue Dec 24 09:23:16 CST 2019 on pts/0  -bash-4.2$ psql  psql (10.11)  輸入 "help" 來獲取幫助資訊.    postgres=# q  -bash-4.2$ exit  登出  [root@alfred ~]# exit  logout  Connection to 192.168.1.99 closed.

可以看到,這樣方便的跳轉功能,使我可以快速連接到各類環境進行測試學習。