SSH(遠程連接工具)連接原理:ssh服務是一個守護進程(demon),系統后台監聽客戶端的連接,ssh服務端的進程名為sshd,負責實時監聽客戶端的請求(IP 22端口),包括公共秘鑰等交換等信息。
ssh遠程登陸
登錄 22為默認端口
ssh omd@192.168.25.137
ssh -p 22 omd@192.168.25.137
ssh免密碼登陸
首先在客戶端上創建一對公私鑰(公鑰文件:~/.ssh/id_rsa.pub
;私鑰文件:~/.ssh/id_rsa
),然后把公鑰放到服務器上 (~/.ssh/authorized_keys
),自己保留好私鑰。當ssh登錄時,ssh程序會發送私鑰去和服務器上的公鑰做匹配。如果匹配成功就可以登錄了。
白話說明:每個機器都可以生成自己的密鑰和公鑰,將自己的公鑰交給其他人后,之后使用ssh遠程訪問遠程機器時,會自動拿自己的密鑰去匹配遠程機器上公鑰記錄(提前登記),匹配上了就自動連接,不需要密碼!
生成公鑰和私鑰
如果已經生成可以跳過(所有詢問輸入都跳過)
ssh-keygen -t rsa
產生一個新目錄,叫.ssh
,進入該目錄ls就會發現有兩個文件,id_rsa
和id_rsa.pub
,前者為密鑰,后者為公鑰
將公鑰復制到其他從機
-
方式一(通用方法)
# 將主機私鑰復制成authorized_keys cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # 修改權限 chmod 600 ~/.ssh/authorized_keys # 遠程拷貝 scp ~/.ssh/authorized_keys cjp@hadoop001:~/.ssh/
-
方式二(ssh專屬方法)
ssh-copy-id
將主機的pub值
寫入遠程機器的~/.ssh/authorized_key
中,- 如果遠程機器上不存在
~/.ssh/authorized_key
文件,將會自動創建 - 如果主機的
pub值
已經存在~/.ssh/authorized_key
文件中,將會復寫該主機在此遠程機器的pub值
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.100
- 如果遠程機器上不存在
文件說明
id_rsa
私鑰
id_rsa.pub
公鑰
authorized_keys
一個登記本,經過授權的公鑰,可以免密碼登陸。不會自動創建。
有專用的ssh-copy-id指令對應這個文件(參考上訴的密碼登陸方式二)。
known_host
參考:https://www.cnblogs.com/cindy-cindy/p/6797216.html
ssh會把你每個你訪問過計算機的公鑰(public key)都記錄在~/.ssh/known_hosts。當下次訪問相同計算機時,OpenSSH會核對公鑰。如果公鑰不同,OpenSSH會發出警告, 避免你受到DNS Hijack之類的攻擊。
只要機子遠程登陸過其他機子,當前機子就會創建出known_host進行登記。
一台主機上有多個Linux系統,會經常切換,那么這些系統使用同一ip,登錄過一次后就會把ssh信息記錄在本地的~/.ssh/known_hsots文件中,切換該系統后再用ssh訪問這台主機就會出現沖突警告。有以下兩個解決方案:
- 手動刪除修改known_hsots里面的內容;
- 修改配置文件“~/.ssh/config”,加上這兩行,重啟服務器。
StrictHostKeyChecking no
UserKnownHostsFile /dev/null