我的小小實驗室之實現最簡單的跳轉
- 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.
可以看到,這樣方便的跳轉功能,使我可以快速連接到各類環境進行測試學習。