第十三章 堡壘機
1.堡壘機的概念
2.堡壘機的實現
概念:背景,公司為了主機系統的管理和安全,更有效的工作,產生的一種工作模式,往往乙個公司有很多臺伺服器,這些伺服器又有許多人需要去操作,運維、開發、測試等。人多
手雜,誰操作了什麼,導致了什麼問題,使用者的管理。主機的管理,都需要高效的實現,堡壘機實現了這些管理上的方便。
直接說事
堡壘機執行流程:
1、管理員為使用者在伺服器上建立帳號(將公鑰放置伺服器,或者使用使用者名稱密碼)
2、使用者登入堡壘機,輸入堡壘機使用者名稱密碼,現實當前使用者管理的伺服器列表
3、使用者選擇伺服器,並自動登入
4、執行操作並同時將使用者操作記錄
注:配置.brashrc實現ssh登入後自動執行指令碼,如:/usr/bin/python /home/wulaoer/menu.py
實現過程
步驟一,使用使用者登入
1步驟二,根據使用者獲取相關伺服器列表#!/usr/bin/env python2#
--*--coding:utf-8 --*--
3import
getpass
45 user = raw_input('
username:')
6 pwd = getpass.getpass('
password:')
7if user == '
wulaoer
'and pwd == '
123':8
'登陸成功'9
else:10
'登陸失敗
'
1 dic =步驟三,根據使用者名稱、私鑰登入伺服器1112 host_list = dic['
laowu']
13#使用者可以連線的主機ip
14print
'please select:'15
for index, item in enumerate(host_list, 1):
16print
index, item17#
迴圈可以連線的主機
18 inp = raw_input('
your select (no):
')#選擇要連線的ip
19 inp =int(inp)
20 hostname = host_list[inp-1]#
連線的主機ip
21 port = 22
1 tran =paramiko.transport((hostname, port,))2#使用者監控日誌:連線伺服器的埠和ip
3tran.start_client()
4 default_path = os.path.join(os.environ['
home
'], '
.ssh
', '
id_rsa')
5#連線方式,使用金鑰
6 key =paramiko.rsakey.from_private_key_file(default_path)7#
金鑰預設路徑
8 tran.auth_publickey('
wulaoer
', key)9#
連線使用者名稱和金鑰
1011
#開啟乙個通道
12 chan =tran.open_session()13#
獲取乙個終端
14chan.get_pty()15#
啟用器16
chan.invoke_shell()
1718
#########19#
利用sys.stdin,肆意妄為執行操作20#
使用者在終端輸入內容,並將內容傳送至遠端伺服器21#
遠端伺服器執行命令,並將結果返回22#
使用者終端顯示內容23#
########
1while
true:2#
監視使用者輸入和伺服器返回資料3#
sys.stdin 處理使用者輸入4#
chan 是之前建立的通道,用於接收伺服器返回資訊
5 readable, writeable, error = select.select([chan, sys.stdin, ],,,1)
6if chan in
readable:
7try
:8 x = chan.recv(1024)
9if len(x) ==0:
10print
'\r\n*** eof\r\n',
11break
12sys.stdout.write(x)
13sys.stdout.flush()
14except
socket.timeout:
15pass
16if sys.stdin in
readable:
17 inp =sys.stdin.readline()
18 chan.sendall(inp)
1#獲取原tty屬性
2 oldtty =termios.tcgetattr(sys.stdin)
3try:4
#為tty設定新屬性5#
預設當前tty裝置屬性:6#
輸入一行回車,執行7#
ctrl+c 程序退出,遇到特殊字元,特殊處理。89
#這是為原始模式,不認識所有特殊符號10#
放置特殊字元應用在當前終端,如此設定,將所有的使用者輸入均傳送到遠端伺服器
11tty.setraw(sys.stdin.fileno())
12 chan.settimeout(0.0)
1314
while
true:15#
監視 使用者輸入 和 遠端伺服器返回資料(socket)16#
阻塞,直到控制代碼可讀
17 r, w, e = select.select([chan, sys.stdin], , , 1)
18if chan in
r:19
try:
20 x = chan.recv(1024)
21if len(x) ==0:
22print
'\r\n*** eof\r\n',
23break
24sys.stdout.write(x)
25sys.stdout.flush()
26except
socket.timeout:
27pass
28if sys.stdin in
r:29 x = sys.stdin.read(1)
30if len(x) ==0:
31break
32chan.send(x)
3334
finally:35
#重新設定終端屬性
36 termios.tcsetattr(sys.stdin, termios.tcsadrain, oldtty)
1注:密碼驗證t.auth_password(username,pw)defwindows_shell(chan):
2import
threading
34 sys.stdout.write("
line-buffered terminal emulation. press f6 or ^z to send eof.\r\n\r\n")
56defwriteall(sock):
7while
true:
8 data = sock.recv(256)9if
notdata:
10 sys.stdout.write('
\r\n*** eof ***\r\n\r\n')
11sys.stdout.flush()
12break
13sys.stdout.write(data)
14sys.stdout.flush()
1516 writer = threading.thread(target=writeall, args=(chan,))
17writer.start()
1819
try:
20while
true:
21 d = sys.stdin.read(1)
22if
notd:
23break
24chan.send(d)
25except
eoferror:26#
user hit ^z or f6
27pass
詳見:paramiko原始碼demo
堡壘機python寫乙個sshe指令碼
目的 當客戶在web端登入賬戶sean時候,系統自動執行某個指令碼,指令碼內容為各個主機的ip,等終止這個指令碼後,系統自動退出當前使用者。編寫ssh python指令碼 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 2...
堡壘機 是個什麼東東?
其從功能上講,它綜合了核心系統運維和安全審計管控兩大主幹功能,從技術實現上講,通過切斷終端計算機對網路和伺服器資源的直接訪問,而採用協議 的方式,接管了終端計算機對網路和伺服器的訪問。形象地說,終端計算機對目標的訪問,均需要經過運維安全審計的翻譯。打乙個比方,運維安全審計扮演著看門者的工作,所有對網...
jquery 學習,乙個乙個來
1.document ready function 與window.nl ad function 的區別 前者為建立完畢dom就執行,可以新增多次.可以用 window load 來實現後者.也可以這樣jquery function 後者為建立完畢並載入完畢才執行,寫多個時後寫的會沖掉先寫的,只能執...