做爲一個開發者,常常要面對管理一大堆服務器的狀況,對unix類服務器,咱們通常用ssh鏈接來管理。那麼你通常怎麼鏈接ssh,輸入密碼?弱爆了,既可貴記,又不安全。如今俺們都用證書來鏈接shell
使用證書來管理鏈接至少有以下兩個好處緩存
使用證書鏈接ssh也很是簡單,首先你得生成一個證書,在shell中輸入以下命令安全
ssh-keygen -t rsa -C joyqi -f my-key-file
-t
定義的是加密方式,通常有rsa
和dsa
兩種-C
定義的是註釋,通常也能夠不寫-f
定義了輸出的證書文件名,不須要寫後綴,由於生成的證書包含了公鑰和私鑰兩個文件,它會自動幫你加文件名。咱們執行後能夠看到以下結果bash
$ ssh-keygen -t rsa -C joyqi -f my-key-file Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in my-key-file. Your public key has been saved in my-key-file.pub. The key fingerprint is: 57:75:20:37:e2:53:29:ef:86:09:8e:1b:47:2b:6f:88 joyqi The key's randomart image is: +--[ RSA 2048]----+ | o *o.| | ..*.o | | +o | | o. .. | | S+.o + | | +.+ o o | | . B . | | E o o | | . | +-----------------+ $ ls my-key-file my-key-file.pub
能夠在上面的命令執行完成,咱們已經獲得兩個文件my-key-file
和my-key-file.pub
。前者就是你的私鑰,是由你本身我的保存的,後者是公鑰,你須要把它上傳到任何你想用這個私鑰來登陸的服務器上。服務器
ok,如今你須要把公鑰文件上傳到服務器上,通常我建議用scp
命令dom
scp my-key-file.pub loginname@yourdomain.com:.
把loginname
和yourdomain.com
分別替換爲你的登陸名和服務器地址。上傳完後咱們須要告訴服務器,之後處理loginname
的登陸時用公鑰來驗證,如今最後一次用ssh密碼登陸你的服務器,並執行以下命令ssh
cat my-key-file.pub >> ~/.ssh/authorized_keys
在後面咱們都用loginname來特指你本身的登陸名,用yourdomain.com來特指你的服務器地址,請自行腦補ide
其中my-key-file.pub
是咱們剛剛上傳的公鑰文件名。如今咱們還要告訴本機,鏈接yourdomain.com
的時候使用my-key-file
這個私鑰來登陸加密
退出ssh鏈接,回到本地。將剛纔生成的my-key-file文件拷貝到~/.ssh
目錄下unix
cp my-key-file ~/.ssh/
而後編輯~/.ssh/config
文件,若是沒有,就建立一個,在其中寫入以下配置內容
Host yourdomain.com IdentityFile ~/.ssh/my-key-file
很簡單吧,一看就懂,根據你的須要自行修改。最後還有一步,別忘了將本地緩存的公鑰文件刪掉,由於那是你之前沒有上傳公鑰時,緩存的服務器默認公鑰,如今你用了本身生成的公鑰就得把這個老的記錄刪掉
打開~/.ssh/known_hosts
文件,找到包含yourdomain.com
的那一行,將它刪掉,而後保存退出
如今,你就能夠正常登陸服務器了,輸入ssh loginname@yourdomain.com
,第一次登陸會出現
The authenticity of host 'yourdomain.com (xxx.xxx.xxx.xxx)' can't be established. RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx. Are you sure you want to continue connecting (yes/no)?
這是由於你剛纔把公鑰刪掉了,系統在鏈接本地沒有緩存公鑰的服務器時會詢問下你,輸入yes
便可,而後你沒輸入密碼就登入了服務器。怎麼樣,是否是很方便。