mac系統使用iTerm2和ssh使用別名免密登錄遠程服務器

一、ssh登錄遠程服務器

 

今天分享一篇實用功能,我們在工作中經常需要連接遠程服務器,查日誌,查性能瓶頸等等,那麼除了使用客戶端工具外,我們最常用的就是使用SSH方式連接了,SSH之所以能夠保證安全,原因在於它採用了公鑰加密。那麼鄉親們知道ssh密碼的登錄過程是怎樣的嗎?

 

ssh密碼登錄過程:

  • 用戶使用命令 ssh user@host或者ssh -p port user@host 向遠程主機發登錄請求;
  • 遠程主機收到登錄請求以後把自己的公鑰發給用戶。
  • 用戶使用這個公鑰,將登錄密碼加密後,發送回遠程主機。
  • 遠程主機用自己的私鑰,將用戶輸入的登錄密碼解密,如果密碼正確,用戶登錄成功。

 

如果是第一次連接登錄遠程主機,會出現下面的警告:

意思是無法確認目標主機的真實性,只知道公鑰指紋,問你是否還要繼續連接?我們選擇yes之後,又會提示一個Warning,這個提示的意思是,目標主機已經得到認可,然後就需要你輸入密碼,密碼正確,就可以連接遠程主機。

 

下一個問題,爲什麼你輸入yes之後,下次再登錄就不會再出現這個提示了?

因爲在你輸入yes,也就是接受遠程主機的公鑰之後,它會被保存在文件~/.ssh/known_hosts中,下次當你再請求連接時,目標主機會認識這個公鑰被保存過,所以就會跳過警告部分,直接讓你輸入密碼。

 

每個ssh用戶都有自己的know_hosts文件,我們進入~/.ssh/中看一下是否添加了目標主機的公鑰

可以看到剛纔選擇yes之後,遠程主機的公鑰已經存在我們的know_hosts中了。

 

 

二、ssh免密登錄遠程服務器

 

我們每次連接遠程服務器的時候都需要輸入密碼,不厭其煩,所以我們就想着能不能只要使用ssh user@host就可以直接免密登錄,答案當然是可以的,所謂的免密登錄,其實就是使用ssh公鑰登錄,下面來看。

 

1、生成公鑰和私鑰

ssh-keygen -t rsa -C '你的郵箱'

命令解釋:

  • ssh-keygen : 生成公鑰(其實只輸入這個命令就可以生成公鑰了)
  • -t rsa : 祕鑰的類型(這裏是rsa)
  • -C '你的郵箱' :用戶識別祕鑰的註釋(不一定是郵箱,可以是任何內容,默認是生成祕鑰所在的宿主機用戶名)

 

然後一路"Enter"下去:

最後會在 ~/.ssh 目錄下生成兩個文件 id_rsa.pub和id_rsa ,前者是公鑰,後者是私鑰,可以查看一下公鑰,如圖:

 

2、設置免密登錄(公鑰登錄)

公鑰生成後,在終端輸入下面的命令

ssh-copy-id -i ~/.ssh/id_rsa.pub 服務器主機用戶名@服務器地址

 

可以發現公鑰已經添加到目標主機,我們來驗證下:

 

3、問題彙總

  1. 公鑰拷貝到目標主機可以通過ssh-copy-id -i命令,可以手動拷貝,自己登錄到目標主機,把id_rsa.pub的內容粘貼到目標主機的.ssh/authorized_keys文件中,若該文件不存在,需要手動創建。
  2. 如果上面兩個方法還是不能免密登錄,就去到目標主機的/etc/ssh/sshd_config這個文件,檢查下面幾行前面的"#"註釋是否取掉。
RSAAuthentication yes   
PubkeyAuthentication yes   
AuthorizedKeysFile .ssh/authorized\_keys

 

4、原理解釋

公鑰登錄是爲了解決每次登錄服務器都要輸入密碼的問題,流行使用RSA加密方案,主要流程包含:

    1、客戶端生成RSA公鑰和私鑰

    2、客戶端將自己的公鑰存放到服務器

    3、客戶端請求連接服務器,服務器將一個隨機字符串發送給客戶端

    4、客戶端根據自己的私鑰加密這個隨機字符串之後再發送給服務器

    5、服務器接受到加密後的字符串之後用公鑰解密,如果正確就讓客戶端登錄,否則拒絕。這樣就不用使用密碼了。

 

 

三、ssh使用別名免密登錄遠程服務器

 

遠程登錄服務器,除了每次輸入密碼以外,每次ssh  服務器用戶名@服務器地址  也很麻煩,而且也不容易記住,如果我們能自己定義一個別名,每次只要ssh 別名,就能直接免密登錄,那該多好!別急,這也很簡單,下面來看。

 

上面我們看到~/.ssh下面有一個config文件,如果你沒有就創建一個,我們使用 vim ~/.ssh/config 命令編輯這個文件,添加如下內容:

#服務器別名
Host mzc
#服務器地址
HostName 服務器地址
#服務器用戶名
User root
#端口(如果有必要)
Port 22

我裏面本來就添加了幾個,現在我再爲上面示例中的阿里雲服務器加個mzc的別名,如下圖所示:

 

驗證一下:

好了,這樣就可以實現使用別名免密登錄了。

 

 

四、使用iTerm2的Profiles快捷登錄ssh

 

上面其實已經講完了ssh使用別名免密登錄遠程服務器的所有步驟了,只要跟着做下來的,一定能成功。可是這時候,有的鄉親們又問了,如果我連ssh 別名 都不想輸入呢?WTF?果然懶得清醒脫俗,都說懶人的想象力與創造力都驚爲天人,我服,既然這樣了,那就別怪我秀了,巧了,這個問題我又會了,沒想到吧!

 

下面就跟大家講一下真香系列之使用iTerm2的Profiles快捷登錄遠程服務器。

 

1、本地創建一個存放腳本文件的目錄

cd /Users/moore/Documentsmkdir Scripttouch ssh_mzc

上面的ssh_mzc就是我創建的腳本文件,你可以自己命名。

 

2、編輯腳本

vim ssh_mzc

在腳本文件中輸入下面的腳本:

#!/usr/bin/expect

set PORT 22
set HOST 你的遠程服務器地址
set USER 服務器用戶名
set PASSWORD 服務器登錄密碼

spawn ssh -p $PORT $USER@$HOST
expect {
        "yes/no" {send "yes\r";exp_continue;}
         "*password:*" { send "$PASSWORD\r" }
        }
interact

然後esc,wq保存退出,cat一下:

 

 

3、設置iTerm

 

點擊 iTerm2 ——> Preferences,選擇Profiles,然後按照下面的6個步驟操作:

  1. 點擊Profiles
  2. 點擊左下角的+號
  3. 輸入Name,自定義
  4. 輸入Tags,自定義
  5. Command下拉框選擇Command
  6. 命令輸入 expect 上面創建的腳本文件路徑

好了,到這兒準備工作就全部完成了。

 

4、驗證

 

使用快捷鍵command+O,雙擊剛纔設定的profile,就快速連接登錄遠程服務器了。

 

或者,在菜單欄點擊Profiles,也可以看到剛纔創建的profile,選擇後也能快速連接登錄上遠程服務器。

 

好了,本篇文章就講到這裏了,我們說了遠程連接服務器的原理,也說了免密登錄的原理和步驟,接下來又講解了ssh使用別名免密登錄的操作,最後又說到了如何使用iTerm2快速連接登錄遠程服務器,應該能解決鄉親們大多數的需求了,歡迎留言討論,如果對你有幫助,可以關注一下我的公衆號“碼之初”,就是對我最大的支持了,謝謝鄉親們!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章