如何優雅地鏈接ssh

做爲一個開發者,常常要面對管理一大堆服務器的狀況,對unix類服務器,咱們通常用ssh鏈接來管理。那麼你通常怎麼鏈接ssh,輸入密碼?弱爆了,既可貴記,又不安全。如今俺們都用證書來鏈接shell

使用證書來管理鏈接至少有以下兩個好處緩存

  1. 安全,目前生成證書的方式無論是RSA仍是DSA不管從位數上仍是加密方式上都比本身生成的密碼安全許多。
  2. 方便,有了證書之後你就不用再記憶密碼了,系統會自動使用證書跟服務器接駁,這一過程不須要人工干預

使用證書鏈接ssh也很是簡單,首先你得生成一個證書,在shell中輸入以下命令安全

ssh-keygen -t rsa -C joyqi -f my-key-file
  • -t定義的是加密方式,通常有rsadsa兩種
  • -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-filemy-key-file.pub。前者就是你的私鑰,是由你本身我的保存的,後者是公鑰,你須要把它上傳到任何你想用這個私鑰來登陸的服務器上。服務器

ok,如今你須要把公鑰文件上傳到服務器上,通常我建議用scp命令dom

scp my-key-file.pub loginname@yourdomain.com:.

loginnameyourdomain.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便可,而後你沒輸入密碼就登入了服務器。怎麼樣,是否是很方便。

相關文章
相關標籤/搜索