SSH 是 Secure Shell 的縮寫,耿直地翻譯過來能夠稱做安全外殼協議。咱們能夠藉助 SSH 協議鏈接到遠程服務器並完成身份校驗操做,也就是說使用了 SSH 密鑰進行身份驗證能夠免去每次都輸入密碼的繁瑣操做,同時帳戶安全性也獲得大幅提升。html
以 Centos 爲例,SSH 默認存放在 ~/.ssh
目錄下,咱們能夠經過 $cd ~/.ssh && ls
組合命令查看目錄下存放的 SSH 密鑰文件。若是目錄下什麼文件都沒有表明服務器未生成 SSH 密鑰,不然你將會看到相似 id_rsa
和 id_rsa.pub
這樣的文件。算法
業內工程師一般會使用非對稱算法 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 地址,能夠經過配置 ~/.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...
在擁有多臺服務器後,你就能感覺到這種登陸方式是多麼的便捷,運維同窗已經習覺得常了呢!