ssh 是一種網絡協議,為遠程登陸和其他服務提供了安全協議。在 ssh 沒出來之前,很多服務是明文傳輸的,很不安全。ssh 的出現就是為了解決這種問題。
現在大多數的 linux 主機默認就裝上了 sshd 服務,方便我們使用。
如果沒有安裝,則查看,並安裝。
rpm -qa|grep ssh yum install -y openssh openssh-server systemctl enable sshd systemctl start sshd firewall-cmd --zone=public --add-port=22/tcp --permanent firewall-cmd --reload
一、ssh的兩種安全驗證
1、基於口令的登陸
比如我們在主機 192.168.10.222 上通過 ssh 以 root 用戶連接 223 主機,注意 223 主機上必須要有 root 用戶。
ssh root@192.168.10.223
如果第一次登陸遠程主機,系統提示該主機安全性無法確定,是否繼續。當我們輸入 yes 后,該遠程主機的公鑰會保存在 ~/.ssh/known_hosts 文件中。
再次登陸時,會跳過警告,直接提示輸入密碼。
然后我們輸入密碼,就可以成功登陸到 223 主機了。
整個登陸流程如下:
1、222 主機發起遠程登陸請求。
2、223 遠程主機返回公鑰給 222。
3、222 主機使用公鑰對用戶輸入的密碼進行加密。
4、222 把加密后的密碼發給 223 主機。
5、223 主機用私鑰進行解密。
6、解密后判斷密碼是否一致,一致就同意登陸。
當然,上面的流程會存在一個漏洞,如果有人冒充了 223 主機,把偽造的公鑰發給222,那冒充主機就可以獲取用戶的登陸密碼了。
2、基於公鑰的免密登陸
由於時常需要跑一些自動化腳本,為了避免每次登陸需要輸入密碼,我們需要配置一對密鑰。
ssh-keygen
也可以指定用戶運行 ssh-keygen,那樣生成的密鑰對就是針對指定用戶的。
sudo -u 用戶名 ssh-keygen
通過 ssh-keygen 一路回車,將會在當前用戶的家目錄下的 .ssh 目錄下創建 id_rsa 和 id_rsa.pub 兩個文件。
由於222 主機當前登陸用戶為 root,所以路徑為 /root/.ssh/ 。
為了能夠以 root 用戶登陸到 223 主機。我們需要把 222 主機上的 root 用戶的公鑰拷貝到 223 主機的 root 用戶上。
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.223
傳輸公鑰時,需要我們輸入 223 主機 root 用戶的密碼,輸入成功后,則公鑰就拷貝到了 223 主機的 root 用戶家目錄下的 .ssh/authorized_keys 文件里。
這樣,我們再次遠程連接時,就不需要輸入密碼了。
ssh root@192.168.10.223
注意,你請求主機以什么用戶連接遠程主機,你就把當前用戶的公鑰拷貝到你要連的遠程主機的用戶下。
比如,我們在 222 主機上創建 test 用戶並切換到 test 用戶,然后連接 223 主機。
adduser test passwd test su test
然后我們為 test 用戶生成密鑰對,然后把公鑰拷貝到 223 主機的 root 用戶上。
ssh-keygen ssh-copy-id -i /home/test/.ssh/id_rsa.pub root@192.168.10.223
這樣,我們以 222 主機上的 test 用戶,就可以免密登陸 223 主機了。
ssh root@192.168.10.223
切回 root 用戶后,我們仍可以 test 用戶登陸遠程主機。
sudo -u test ssh root@192.168.10.223
登陸流程如下:
1、222 主機發起遠程登陸請求。
2、遠程 223 主機返回一個隨機串。
3、222 主機對這個隨機串用私鑰進行加密,並返回給遠程 223 主機。
4、223 遠程主機使用分發過來的公鑰對隨機串進行解密。
5、解密成功,說明登陸信息正確,允許登陸。