puppet運維自動化之ssh key
【puppetsshkey導(dǎo)讀】
sshkey,作為系統(tǒng)管理人員經(jīng)常會使用ssh連接遠程服務(wù)器,創(chuàng)建相應(yīng)的密鑰,可以免去每次登錄都要輸入密碼的痛苦。另外關(guān)閉相應(yīng)的password認(rèn)證,用sshkey來認(rèn)證也可以提高ssh安全。但有個問題,就是有N多臺服務(wù)器,如何批量創(chuàng)建sshkey認(rèn)證呢?還是用shell的for循環(huán)?其實這完全可以交給puppet來搞定。本章就為大家介紹運維自動化之sshkey管理。
【puppetsshkey基礎(chǔ)】
在介紹puppet管理sshkey之前,我們簡單回顧下面的問題:
1.什么是ssh?
SSH為SecureShell的縮寫,由IETF的網(wǎng)絡(luò)工作小組(NetworkWorkingGroup)所制定;SSH為建立在應(yīng)用層和傳輸層基礎(chǔ)上的安全協(xié)議。
2.ssh的工作機制
SSH分為兩部分:客戶端部分和服務(wù)端部分,工作機制大致是本地的客戶端發(fā)送一個連接請求到遠程的服務(wù)端,服務(wù)端檢查申請的包和IP地址再發(fā)送密鑰給SSH的客戶端,本地再將密鑰發(fā)回給服務(wù)端,自此連接互相建立。
3.如何創(chuàng)建ssh信任
步驟如下:a.本地生成密鑰
#ssh-keygen-tdsa-C”testbysky”
b.復(fù)制公鑰到你想要的登錄的機器(比如IP為192.168.3.235)
#scp.ssh/id_dsa.pubroot@192.168.3.235:/root/.ssh/
c.登錄到192.168.3.235,這時候還是需要輸入密碼的。
#cat~/.ssh/id_dsa.pub>>~/.ssh/authorized_keys #chmod700~/.ssh #chmod600~/.ssh/authorized_keys
至此,就可以無密碼登錄。熟悉上面的后,我們就可以為大家詳細講解,如何用puppet來管理sshkey?
【puppetsshkey概要】
puppetsshkey是主要安裝和管理SSH主機密鑰。
這種類型只知道如何安裝到/etc/ssh/ssh_known_hosts,它不能管理用戶的授權(quán)密鑰。
【puppetsshkey參數(shù)】
alias:別名,通俗的可以理解為小名,主機可能具有多個別名。如果有多個話可以用數(shù)組表示。
ensure:sshkey的基礎(chǔ)屬性,指定key是否生成,可以設(shè)置的值為present,absent。
key:生成的密鑰值,一般是十六進制數(shù)字的長字符串。
name:名稱,主機名。
provider:經(jīng)常不需要指定,puppet根據(jù)相應(yīng)的操作系統(tǒng)選擇相應(yīng)的provider.
parsed:為ssh解析和生成已知的host文件。
target:存儲的SSH密鑰文件的路徑。
type:key生成的加密類型,通過是ssh-dsa,或者ssh-rsa,備注,dsa也可以用dss來表示。
user:指定是哪個用戶的key。
【puppetsshkey示例】
假設(shè),我創(chuàng)建好了一個用戶名為sky的用戶。由于他是SA,需要管理N臺機器,為了方便無密碼登錄。
代碼示例:
ssh_authorized_key{“hostname”: ensure=>present, type=>“ssh-dss”, key=>“密鑰值”, name=>“hostname”, target=>“/home/sky/.ssh/authorized_keys”, user=>‘sky’, }
【puppetsshkey總結(jié)】
上面的例子是有個問題的,就是如果每多執(zhí)行一次的話,他都會把key追加寫到/home/sky/.ssh/authorized_keys。
puppet非常強大,創(chuàng)建用戶可以用puppetuser來管理,本章最好結(jié)合用戶。這樣可以實現(xiàn)基礎(chǔ)的用戶管理,用戶key管理等基礎(chǔ)工作,再配合puppetpackage管理軟件包。一步步朝運維自動化方向前進。
補充:剛有同學(xué)在QQ群里問到,“就是如果每多執(zhí)行一次的話,他都會把key追加寫到/home/sky/.ssh/authorized_keys”
有沒有解決方法,其實這是sky不小心,在密鑰值中寫了說明“XXX==test1.test.com”,把test1.test.com這個說明給去掉就可以解決了。