SSH 免密碼/免用戶名/免IP登陸雲服務器實踐

SSH 是 Secure Shell 的縮寫,耿直地翻譯過來能夠稱做安全外殼協議。咱們能夠藉助 SSH 協議鏈接到遠程服務器並完成身份校驗操做,也就是說使用了 SSH 密鑰進行身份驗證能夠免去每次都輸入密碼的繁瑣操做,同時帳戶安全性也獲得大幅提升。html

以 Centos 爲例,SSH 默認存放在 ~/.ssh 目錄下,咱們能夠經過 $cd ~/.ssh && ls 組合命令查看目錄下存放的 SSH 密鑰文件。若是目錄下什麼文件都沒有表明服務器未生成 SSH 密鑰,不然你將會看到相似 id_rsaid_rsa.pub 這樣的文件。算法

生成 SSH 密鑰

業內工程師一般會使用非對稱算法 RSA 來生成一對密鑰——公鑰和私鑰,在終端輸入如下命令:vim

ssh-keygen -t rsa -C "vansenb@foxmail.com"

參數 -t-C 並不是必填項,但咱們能夠藉助它們來指定生成時候使用的算法(RSA)和我的標識(郵箱)。ssh-keygen 的完整含義是 ssh key generating,也就是生成 SSH 鍵(密鑰)。輸入上方命令並回車,終端會給出以下提示:安全

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):

第一行是提醒咱們正在生成一對密鑰;第二行則是讓咱們選擇密鑰存放的文件路徑,一般咱們都會選擇使用默認路徑,此時不用輸入任何路徑,直接回車便可;回車後終端給出以下提示:服務器

Enter passphrase (empty for no passphrase):

它提示咱們輸入一串密碼短語,這裏不輸入任何值也不會影響生成結果,直接回車便可;回車後終端給出以下提示:運維

Enter same passphrase again:

這裏是讓咱們再次輸入一遍密碼短語,省得咱們在第一次輸入的時候誤操做。若是上一步沒有輸入值,那麼這裏也直接回車便可;回車後終端給出以下提示:dom

Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:/k7eBzEwIUHIjh0osGBEkoRMLKKbCV4XzyhHJ3ffsj0 vansenb@foxmail.com
The key's randomart image is:
+---[RSA 3072]----+
|%O   o o+...     |
|O+. .++o oo      |
|=  ..+O.. .o.    |
|o  o.+oo   oo.   |
|o+. +   S   +o   |
|+.     .   ..E   |
|        . .  ..  |
|         + .  .  |
|         .+ ..   |
+----[SHA256]-----+

從提示中咱們能夠看到密鑰存放的文件路徑,默認狀況下公鑰和私鑰都存放在 ~/.ssh 目錄下,這也是爲何一開始咱們要去 ~/.ssh 目錄下查看密鑰文件的緣由。ssh

免密登陸

一般狀況下,咱們會用 ssh username@ip 命令登陸服務器,執行命令後終端會提示咱們輸入密碼。更好的作法是藉助 SSH 密鑰幫助咱們驗證身份,直接省去輸入密碼的步驟。編輯器

前面學會了如何生成 SSH 密鑰,接下來咱們將學習如何實現雲服務器的免密登陸。首先按照上面的介紹在本身的計算機上生成密鑰對,並複製公鑰文件 ~/.ssh/id_rsa.pub 中的內容(能夠用 cat ~/.ssh/id_rsa.pub 命令查看公鑰文件內容),也就是下面一長串ide

ssh-rsa AAAA ... ... 5ztuiXs= vansenb@foxmail.com

ssh-rsa 開始,直到我的標識結束,所有複製。

接下來到目標服務器(也就是你想要免密登陸的雲服務器,假設雲服務器的公網 IP 是 10.1.1.1)上操做。在雲服務器的 ~/.ssh 目錄下新建一個名爲 authorized_keys 的文件,並將剛纔複製的你的我的計算機生成的公鑰字符串寫入到 authorized_keys 中。若是你使用的是 vim 編輯器,那麼命令以下:

$ cd ~/.ssh
$ vim authorized_keys

使用 vim 編輯器打開文件後按 i 鍵進入編輯模式,使用鍵盤快捷鍵 Ctr V 粘貼剛纔複製的公鑰字符串。接着按 ESC 鍵進入 vim 編輯器的命令行模式,輸入 :wq 並回車。此時你計算機中的公鑰已經在雲服務器上存放了一份,當你須要登陸的時候,只須要輸入:

ssh root@10.1.1.1

而後按下回車便可,若是是第一次登陸到這臺雲服務器,終端會提示:

The authenticity of host '10.1.1.1 (10.1.1.1)' can't be established.
ECDSA key fingerprint is SHA256:nGvmS+JKzQf1gG+Nzc0QN/qS6xSp1iV0rJFP1dILel4.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

這時候咱們輸入 yes 並回車便可。回車以後終端給出了新的提示:

Warning: Permanently added '10.1.1.1' (ECDSA) to the list of known hosts.
Last login: Wed Dec 23 21:43:28 2020 from 111.94.33.65

Welcome to Cloud Elastic Compute Service !

[root@iZ1nmehZ ~]#

這表明咱們不須要輸入密碼便可經過 SSH 協議鏈接遠端服務器了,免密登陸成功!

免密登陸失敗

有些服務器中的 sshd 服務配置並未開啓公鑰登陸選項,若是上面的 ssh root@10.1.1.1 回車後終端顯示的不是雲服務器相關信息,而是輸入密碼的話,就須要咱們到雲服務器上開啓 sshd 服務的公鑰登陸配置。

在雲服務器上執行 $ vim /etc/ssh/sshd_config 命令,進入到 sshd 配置文件後找到 PubkeyAuthentication 項,刪除該項的註釋符 # 並確保該項對應的開關爲 yes。錯誤的配置和正確的配置以下:

#PubkeyAuthentication no  # -> 錯誤的配置

PubkeyAuthentication yes  # -> 正確的配置

一頓操做猛如虎,操做完以後從新啓動 sshd 服務,重啓命令爲 service sshd restart

這時候再在我的計算機中執行 ssh root@10.1.1.1 命令,就不會讓你輸入密碼了,免密登陸成功!

:::tip
固然,除了用我的計算機鏈接雲服務器以外,雲服務器與雲服務器之間也能夠這麼配置。
:::

免用戶名和 IP 登陸

雖然咱們省去了輸入密碼的步驟,不過用戶名和 IP 地址也不短。若是想要省略用戶名和 IP 地址,能夠經過配置 ~/.ssh/config 實現。默認狀況下 ~/.ssh 目錄下是沒有 config 文件的。咱們能夠經過 $ vim ~/.ssh/config 建立。接着寫入如下配置信息:

Host s-crawl
HostName 10.1.1.1
Port 22
User root
IdentityFile ~/.ssh/id_rsa

其中 Host 表明雲服務器暱稱、HostName 爲雲服務器的公網 IP 地址、Port 表明鏈接時使用的端口號、User 表明鏈接時選用的用戶名、IdentityFile 表明本地私鑰文件的路徑。配置完成後退出編輯器,這時候咱們就能夠用雲服務器暱稱登陸雲服務器啦,在終端輸入 $ ssh s-crawl 便可。

文章首發於 韋世東的技術專欄 http://www.weishidong.com/blo...

在擁有多臺服務器後,你就能感覺到這種登陸方式是多麼的便捷,運維同窗已經習覺得常了呢!

相關文章
相關標籤/搜索