需求:由于工作需要,我自己的工作站上搭建有很多套實驗環境,而在某種特定場景下,我需要通過預設連接配接的終端能随時跳轉切換到其他環境下臨時測試使用,因為隻有我自己用,無需引入複雜的跳轉機系統,也不需要審計。
環境:均為Linux伺服器
實作:我想通過最簡單的一些運維知識,搭建一套最簡易的跳轉程式,提升自己的工作效率。
- 1.梳理有跳轉需求的環境資訊
- 2.加入使用者的環境變量
- 3.配置ssh無密碼登陸
- 4.展示跳轉機使用效果
首先我預設連接配接的環境本身就是一套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位址。
編輯環境變量的配置檔案,增加内容如下: 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]'
這點我有考慮過是否有必要?是否因配置了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.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.
[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.
[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.