1. 程式人生 > >我的小小實驗室之實現最簡單的跳轉

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

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

  • 1.梳理有跳轉需求的環境資訊
  • 2.加入使用者的環境變數
  • 3.配置ssh無密碼登陸
  • 4.展示跳轉機使用效果

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

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

  • Linux快速配置叢集ssh互信

上傳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.

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