來乙個堡壘機

2022-06-24 07:54:07 字數 4717 閱讀 4671

第十三章   堡壘機

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

print

'登陸成功'9

else:10

print

'登陸失敗

'

步驟二,根據使用者獲取相關伺服器列表

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#

########

使用者監控日誌:

1

while

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

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

注:密碼驗證t.auth_password(username,pw)

詳見: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 後者為建立完畢並載入完畢才執行,寫多個時後寫的會沖掉先寫的,只能執...