SSH-key连接原理
1,我們想通過遠程的方式從我的電腦遠程連接到對方的電腦上那么在LINUX系統下我們可以通過一種叫ssh的方式連接過去。SSH客戶端(ssh命令)還包含一個很有用的遠程安全拷貝命令scp。
2,有兩種連接方式,
(1)telnet? 這種是明文的容易讓黑客捕獲。
應用方式:安裝telnet(遠程登錄的意思)
Yum –y install telnet
安裝好后怎么鏈接呢?
如 telnet 192.168.112.356 22????? IP是對方IP地址
????????????????????????????????????????????????????????????????????? 22端口號、
當然對方也要安裝telnet
?
(2)ssh 是經過加密的。
3,ssh有兩種級別的連接方式
第一種級別(基于口令的安全驗證)
只要你知道自己帳號和口令,就可以登錄到遠程主機。所有傳輸的數據都會被加密,但是不能保證你正在連接的服務器就是你想連接的服務器。可能會有別的服務器在冒充真正的服務器,也就是受到“中間人”這種方式的攻擊。第二種級別(基于密匙的安全驗證)
需要依靠秘鑰,也就是你必須為自己創建一對密匙,并把公用密匙放在需要訪問的服務器上。客戶端軟件就會向服務器發出請求,請求用你的密匙進行安全驗證。服務器收到請求之后,先在該服務器上你的主目錄下尋找你的公用密匙,然后把它和你發送過來的公用密匙進行比較。如果兩個密匙一致,服務器就用公用密匙加密“質詢”(challenge)并把它發送給客戶端軟件。客戶端軟件收到“質詢”之后就可以用你的私人密匙解密再把它發送給服務器。
總結1,
ssh連接第一級別:
?ssh連接默認端口是22
(1)
?有兩臺電腦 A和B.?????????????????????? A要登錄 B電腦的超級用戶
#ssh 192.168.29.144?????????????????? 登錄超級用戶IP前不用加@
第一次連接 會問你 記錄不記錄對方IP地址, 必須記錄 YES
之后對方密碼彈出 輸入對方的密碼回車
用hostname –I? 查看下本機IP地址,這樣就是對方的IP地址對方的主機了。
然后exit退出,就等退出了
?
(2)
有兩臺電腦 A和B.?????????????????????? A要登錄 B電腦的普通用戶? (不是超級用戶)
添加個用戶
??? 如我現在在另一臺電腦添加用戶
???? Useradd yunjisuan?? 創建一個叫yunjisuan 的用戶?? 路徑時/home 目錄
???? Echo “123123” | passwd? - -stdin yunjisuan?? 給yunjisun 用戶添加密碼。
我現在在第一臺電腦我用ssh連接另一臺電腦的 yunjisuan用戶
A電腦 輸入: ssh yunjisuan@192.168.,29.144? (ip地址前不加東西就是超級用戶)
之后輸入密碼:123123???? 就登錄進去了
?
?
(3)
遠程復制在電腦雙方都要安裝 scp命令
yum insiall openssh-clients?? (打開ssh客戶端)? 安裝scp遠程復制命令
之后怎么做呢?
1,我在A電腦
映射一句話??? 到/etc/hosts里
?# echo "'hostname –I' www.yunjisuan.com" >> /etc/hosts
Cat /etc/housts 看一下。 沒問題
再用scp復制,把A的housts目錄復制到B電腦? 超級用戶 /root/etc下
#scp /etc/hosts? 192.168.29.144:/etc/回車? 復制hosts這個目錄過去。
注意:沒加root@192.168.29.1144 就是默認超級用戶登錄。
上B電腦查看 cat /etc/hosts? 就有了
?
? 2,以上我是把我A電腦的數據復制過。
去接下來。
我要把B電腦的數據拉過來怎么操作呢??
? 用#:scp root@192.168.29.144:~/222 .
? ??????這是把B電腦的? 根下YYY文件復制到我A電腦的 ?點 當前目錄下。
?
?
?
總結2
ss h連接第二級別
秘鑰的意義就在于不用輸密碼,就進入對方的服務端。
1,首先? 創建秘鑰對
ssh??? Tab一下 會發現很多命令
?? Ssh-Keygen 生成秘鑰對的命令 ???(交互生成秘鑰)
Ssh-copy-id分發秘鑰對的命令
(1)# Ssh-Keygen 回車
會出來這三樣,第一個…..(/root/.ssh/id_rsa) 這是這個命令 在根下root下 .ssh 點就是隱藏文件。后邊的id_rsa就是秘鑰對的名字???? (在這個目錄下生成一個叫id_rsa的文件)??????????
?????????????????????? 第二個是密碼? 直接回車不設就行
?????????????????????? 第三個也是密碼,直接回車
?????????????????????? 就創建完了。
(2)#ls .ssh?? 看一下? 有三個文件 分別是
id_rsa 私鑰???? id_rsa.pub 公鑰?????????? known_hosts遠程登錄記錄
客戶端拿私鑰???? 服務端拿公鑰 (就是誰登錄誰 就把公鑰發給誰)
私鑰可以有很多份,但公鑰只能有一份,私鑰去找公鑰。
(3)我現在在客戶端創建了秘鑰對
??????? 現在得把公鑰給服務端復制過去????????????????????
怎么操作呢??
首先(1)在服務端家目錄下創建一個 mkdir? .ssh? 目錄
(2)ll? -d? .ssh/?? 看看他是什么權限?? 為什么看呢?因為你的秘鑰權限過大,Linux系統擔心安全是不會讓你成功的。
所以你得給它設置下權限(客戶端服務端雙方都要設置700權限)
????? #:chmod 700 .ssh/???????????? 它權限必須是700
(3)在服務端把公鑰改名vi /etc/ssh/sshd_config
???????? 進入編輯器在47行? 復制authorized_keys 這個名字
????????? mv id_rsa.pub authorized_keys???? 改成這個名字
?????????????????? set nu?????????????????????????????????? 顯示行號
?
或者cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys? 這樣改名
?
(5)現在來客戶端把公鑰 復制過去給服務端(或者相反)
#:scp .ssh/authorized_keys 192.168.29.144:~/.ssh/
(6)還有些提高效率的操作。
vim /etc/ssh/sshd_config 后??
79行改成no???????????? (centOS6是81行 改成on)? 這是驗證改成on 不驗了
115行改成no?????????? (centOS6是122行 改成on)?? NDS 改成no
之后重啟一下systemctl restart network
然后scp /etc/ssh/sshd_config root@192.168.29.144:/etc/ssh/
這個sshd_config這個修改后的配置文件給對方發過去。覆蓋對方的配置文件(省得對方改了)? 這是ssh的配置文件。
對方也重啟一下systemctl sshd reload
(7)ssh? 192.168.29.144? 這就無密碼的連接上了?
?結束???? ??????這就是秘鑰連接 免秘鑰的過程。
但是你連普通用戶照樣還有密碼,除非普通用戶也有公鑰照以上這么改。
?
示范一下連接普通用戶
前提:要在對方電腦上創建個普通用戶
(1)Useradd yunjisuan?? 創建一個叫yunjisuan 的用戶? 路徑在/home 里
???? ?????Echo “123123” | passwd –stdin yunjisuan?? 給yunjisun 用戶添加密碼。
??????? (2)然后進去對方電腦普通用戶下(yunjisuan下)創建
#:mkdir?? .ssh 目錄???
在改.ssh的屬主為yunjisuan?? #:chown yujisuan? .ssh
??????????????? 權限為700?????????? #:chown 700? .ssh
?????????????????????????????????????????? #:ll –d .ssh?? 查看下
(3) 因為普通用戶里沒有.ssh目錄。所有要把我方的公鑰給復制過去到yunjisuan用戶的超級用戶也就是~家目錄里
#scp ~/.ssh/authorized_keys yunjisuan@192.168.29.144:~
(4)然后進去對方電腦cd /home/yunjisuan? 就有authorized_keys文件了。
在把authorized_keys移到? .ssh里
mv authorized_keys? .ssh
(5)但是這時我進的是普通用戶,普通用戶要能用這文件就要把authorized_keys的屬主改成普通用戶:???
#:chown yujisuan? authorized_keys
(6)連接ssh yunjisuan@192.168.29.144 就連接上了
?
?
?總結3
ssh 秘鑰連接的簡化方式
在客戶端.ssh下? 還有個ssh-copy-id? 它是用來分發公鑰的剛才服務端做的那些操作它都能自動來完成。
(1)
一條命令生成秘鑰對。 而不用之前的ssh-Keygen 生成秘鑰對的命令? (交互生成手動分發)
??????? -d dsa?? 指定加密算法 dsa
???????? -f???????? 指生成的秘鑰放在哪里
???????? -P???????? 杠大P “”里邊沒東西就是空密碼
#ssh-keygen –t dsa –f ~/.ssh/id_dsa –P “” 回車
(2)一條命令分發
我現在要分發
???????? -i??? 你要分發什么?(要分發這個~/.ssh/id_dsa.pub公鑰)
???????? ssh-copy-id –i ~/.ssh/id_dsa.pub yunjisuan@192.168.29.144
?????????? 現在進入服務端 家目錄下/home
Ls –a 看一下? yunjisuan
最后一行多了一個700權限屬主屬組都是yungjisuan(直接就把權限改了)
回車后再看下.ssh里邊公鑰在不在。
??? 之后用客戶端直接連接服務端。可以了
(3) 但是以上步驟分發秘鑰時還需要輸入密碼。? 怎么把這個密碼也刪掉呢?
?????? 有個命令叫sshpass??? 需要云yum安裝本地yum沒有
sshpass –p “123123”?? 輸入密碼之后再分發。
???? ??#sshpass –p “123123” ssh-copy-id –i ~/.ssh/id_dsa.pub yunjisuan@192.168.29.144
????? 之后登陸OK了
(4)cd .ssh回車
Ls里有個這個目錄? known_hosts?
這是記錄來訪的IP? 如果要清空了,再去登陸對方還要輸入密碼
清理方法是[.ssh] #? > know_hosts
怎么做我在清空known_hosts后,在連接對方,還能免密的連接上呢?
需要再加幾個參數:
–o StrictHostKeyChecking=no
#sshpass –p “123123” ssh-copy-id –i ~/.ssh/id_dsa.pub “–o StrictHostKeyChecking=no? yunjisuan@192.168.29.144” 回車
(5)在連接就可以了?????????????????????????????????????????? 結束
轉載于:https://www.cnblogs.com/changtianwei/p/9936178.html
總結
以上是生活随笔為你收集整理的SSH-key连接原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: docker+selenium grid
- 下一篇: nginx反向代理获取用户真实ip