這裡介紹如何在 Linux 中產生亂數的密碼,讓你的密碼更安全,不容易被破解。

對於 Linux 管理者而言,很多情況下都會需要使用到亂數的密碼,例如新增 Linux 系統的使用者帳號時,你會需要為每一個新的帳號設定一組預設的密碼,在安全性的考量上,這個預設密碼也不能太簡單,最好的方式就是使用亂數產生的密碼,確保每個帳號在使用者拿到帳號資訊之前,不會被駭。

另外系統上的一般使用者忘記密碼也是時常會發生的事,而管理者在這種時候就會需要為使用者重設密碼,這時候也會需要亂數的密碼,以確保系統與帳號的安全。


以下我們介紹幾個 Linux 中可以用來產生亂數密碼的指令,以及一些使用範例。

pwgen 指令

pwgen 是一個可以產生亂數密碼的小工具,在 Ubuntu/Debian Linux 中可以用 apt 安裝:

sudo apt-get install pwgen

安裝完成後,執行它就會產生亂數的密碼:

pwgen

預設會產生 160 組長度為 8 的亂數密碼:
eoLe3Aht EeCh5ooj phooVai5 queY3Euw Aichoo5e Al7mae1o aeLooj7o ahweC5ie
ohX3IK8a eiH7Wohg veiS0Iu3 Aiv7ilee if3Eetee thae3Boo haeTh9ao ahD8uiG7
oxoo9oV3 Oozei6wi phoo7ouM Wiel0ohb Tae6ar0o Da6quie3 eeKoh2Ee eo4Ohc5U
ivie0Uc8 BohPhah4 rohtieM9 ko0aiZe2 jaeC4dai ej6Quiel ailoh2Ne oa8ooQuo
es9Aitai aiKae1Hu Mohko9su aim6eoDo ieJu0Phe aezeiD6p Ub9ilai4 eiru3Eth
neiY9eCh au7cei5W Wae4yohr Aengad5e Phahgh5v cohY8ies tav9Och3 UithaGh8
ChahieY4 aeC6umei Loh4cai1 hieY0wai oQu9choo eiph6Too eer6uaGh Fi1auhai
Viek9zea Ipoosh2U aexee2Oo aishohP6 ohpee5Xo leih2Kai eisie7Th Eic1uu2g
thub1Aeg faeK8boo choo4iPu ahciKu6b hooxoa7X eecheiZ4 ahkoS3ch saoPae4t
haiVo9oo ohL9iof0 FoV9YiPe eaY8nies di0aoc7I phoe2OBa Ei6aiyai akai1eeW
Moh0ge4n Ep9iefu8 eVu8uvoh Wavah0Wo Hah7ueki Pho0oobu Ohgo7doh penie6iH
sha0Eemu phohV6om eelueK3f OhCaesh8 ub3Leim4 Ahm7chee eeTi5aix Thijai2m
Shai8moh eebae5Hi ANgi8aiZ vaih8iiK oKooW4Nu Ahchae3e Cei0uFee Quu9aej0
Eishe4za xi9niB2i Hee8laeG aebee3Ji Aech7tho en1ohZia Ua2eweo6 saL3eeg9
caeDung3 Eiyoth8x Boas9Doo su5Ahjoh ooW2qua1 ge1pup2A kaiJaes8 Yoh2mi6o
Gee1eihu Ie1aimis oomah1AP Bes6AiDo eizeir2I Ein4eiPh aiYu1osh ni0Fohh0
Eimiema9 rooghi0E eeThoh8e egeoYoe0 ziegieJ3 Ohzan7ji aich9Yei ief3aiKe
theiy5aT Gohwoo9i ekegh2Ph oashieC5 AhBahsh1 XohB5ci4 quaJohH5 Hahbah4l
xua0so5X ooG1Za5a Hi1aecho Eidu8tho ooph7Sha tahtie4A pie5Ohph oeDie0io
Ahkefae4 Lot6eer9 Deeghi0o Lei0waiw foo8aeNo zahB9xai lee4oPho loo4Shu9

pwgen 預設產生那麼多的密碼是有原因的,這樣的設計可以讓使用者在其中選擇一組來使用,就算旁邊有其他人偷看到,也很難知道真正的密碼是哪一組,當使用者記好密碼之後,隨即將螢幕上有含有這些密碼的終端機關閉,這樣就可以避免密碼外洩的問題。

您也可以直接指定要產生的密碼長度與個數,例如產生 6 組長度為 30 的密碼:

pwgen 30 6

輸出為
aebazae4quaah8Iikogh0Doh7Shief oaleZohj2Aefeimues5moeHeiLeePo
uothoTiereek1Feeh4Ithuacha8hee aememifeejuW9joo2Ohwoo5eijier8
fohch2oofoodu9kooceeS9ahsh6oaC eeDaiqu4fiotaiPi8jax7ahRe4ahm0

pwgen 如果是用在 shell 指令稿中的話,它預設的情況就會改為一次只輸出一筆密碼,這樣可以方便程式的撰寫:

#!/bin/sh
PASSWORD=`pwgen`
echo "The password is" $PASSWORD

這個指令稿執行起來的輸出會像這樣:
The password is engeweon

在預設的情況下,pwgen 會產生讓人比較好記的密碼,並不是完全用亂數產生的,如果您想要產生真的非常安全的亂數密碼,可以加上 -s 參數,而這樣的密碼對一般人而言就比較難記的起來,適合用於程式中,或是用紙筆記下來。

pwgen -s

另外 -y 參數可以在密碼中加入一些特殊字元,讓密碼更安全,:

pwgen -y

輸出為
iH8hu?ta Avung~u2 dae9Wom: ex$ieS1f Eisa|d7A tie6ohF/ Eic^ah2a vaiM]a1r
rug’i2Vo oow!ee9Y eeRa AhL.ie1i eiz/ie3C Aec4xi$r Aigu!ng9 ief5ei/G ohh3eiS* Mie.k1ei mah;gh2A
Tho}az9E AhG8pai" ku-eCee4 oowee`Z7 EiCh[oo2 ox^e6Oza Aen8ea(b Aew-eim9
Eyai\W3O ohj~ae3U Ohj8ko$c wi7fee{Z be1Yo:Ph Zie2aus~ Emee{th7 Vah’y7ee
Aah}ie7o Mad3iep; mohRa!a6 eiZ6Doh{ vie\ph0I oV:ael8o AhTh?ai9 ief4Ec=e
Ea0ey]ae yai9Hie? Oong*oh8 Ohl!oo0o ie:R)aa3 eeM9iGo[ ieB2eo_l heHul$o2
meiB-ae6 Cuo5UNg: Aimeiv2
wai#j5Ei de=V7Vof Kae2nei= Ko\H7eim Ux}u|an2 boa%Ni0u yaiG’ah2 sho@duZ5
oom$oo7T pa-Ph8ye Sho6la|e Ahrie?h7 Ohw]ohs2 lo1DuH|u ez=ie9Yu Oi[sh8xi
Ca?eze4m ohm.ie6L fe8Lieg. Tha6iew; LaiG%i7u Xoh;Tie2 UL8de%xa io?c7Zai
Ahmi*l2o uuH6Tee% Co0Soh?j aef_oh2I ooY dah0Reg) oo4Kohr[ AhC/ah4s Rie%j3oo Ia@s3ahc uLuu.la2 oos4Pin+ lu7Jai|c
ohk;e5Ca Au/ghoh8 uu6Dee?h Eeke~Th7 si’r4The Iw:uphe4 phii|n5N oeWe#e7b
Eiz9ri{x Pu_h1eeg aeF6aip. Boo}v2Ux ew,e5ieZ uch[ohM0 we_if2Ei aeH8bie)
Uud%e8fu eeC?ox3f eiC6ji+w Xeip^a8v hei]y8Ae EP7eK/ie aeNoh]g5 ta8Sup?u
see:Z1vi Bou@b9Ah Ij|i4oqu ai4ieH`u No"u4xae AP(oo8gi ohsh1Io( qua.iP1y
ai7Yae
不過這樣的話,當然密碼也就更難記了。

以下是 pwgen 其他的一些常用參數:

  • -0:讓產生的密碼不要包含數字。
  • -1:輸出時,一行顯示一個密碼。
  • -A:讓產生的密碼不要包含大寫英文字。
  • -B:讓產生的密碼不要包含容易混淆的字元,例如 l1,或是 0O
  • -c:讓產生的密碼中至少包含一個大寫英文字,這是預設的選項。
  • -n:讓產生的密碼中至少包含一個數字,這是預設的選項。

您可以任意結合這些參數來調整密碼的結構,例如想要單純以小寫的英文字母來產生密碼,就可以執行:

pwgen -0A

makepasswd 指令

makepasswdpwgen 類似,都可以用來直接產生各種長度的亂數密碼,使用前先安裝:

apt-get install makepasswd

直接執行會產生一組亂數密碼:

makepasswd

輸出為
EzNiYbfS
產生長度為 50 的亂數密碼:

makepasswd  --char 50

輸出為
2Mx83b18wgJsjTTGd9QGTTtsa32Gc3cJzLD8EKfBu4dmR5VI0Y
一次產生 6 組長度為 20 的亂數密碼:

makepasswd --char 20 --count 6

輸出為
AdQFeV15YbBry3nQh0NC
hvJ1ErVTfDVTxRFhHApU
JuGr7N3pA3HieJ1fNDDF
4AUod2zqoSmcVVSYNf2B
qtHAjio3GT1TDtWw7hDa
u67md8FeTWmjccKY8JAf