如何配置SSH用戶免密登錄
A. SSH 實現免密登錄
本文介紹如何通過 SSH 實現免密登錄。
工作環境:
SSH 是一種網路協議,用於計算機之間的加密登錄。SSH是英文Secure Shell的簡寫形式。
通過使用SSH,你可以把所有傳輸的數據進行加密更加安全可靠。使用SSH,還有一個額外的好處就是傳輸的數據是經過壓縮的,所以可以加快傳輸的速度。SSH 有很多功能,它既可以代替 Telnet,又可以為FTP、Pop、甚至為 PPP 提供一個安全的"通道"。
SSH 協議更多內容看最後附的鏈接,有興趣的朋友可以了解一下。
什麼是免密登錄呢?
通常我們登錄 SSH 是通過賬號和免密來登錄的,輸入 ssh username@ip-server 然後輸入密碼。
如果每次都輸入密碼會很麻煩,而且要對多台主機進行自動化管理,每次都要輸入密碼不現實。我們可以配置公鑰和密鑰進行免密登錄。 免密登錄做的事情其實就是通過 SSH 的公鑰和密鑰來校驗身份信息。
首先你要知道每台主機有一份公鑰和一份私鑰。我們要做的事情可以用一張圖來表示:
圖片的操作依次為
1.生成密匙對
之後可以在 /root/.ssh 中看到生成的密匙對
2.拷貝一份 A 的公鑰給 B
此時在 B 的 authorized_keys 中就會有一份 A 的 id_rsa.pub 公鑰信息。
註:第二步操作的做的事情其實就是一個拷貝密鑰的工作,也可以手動拷貝,但是用上面的命令更方便。
3.最後我們就可以免密登錄,也就是不輸入密碼 A 就可以登錄 B
192.168.0.10 為 B 的 ip 地址
如果要退出登錄,輸入 exit 即可。
192.168.0.10 是 ip 地址,也就是說登錄的時候我們還要輸入一次 ip。我們可以給每個主機配置一個別名,用 ssh ip-server 的方式登錄。
就像人有身份證也有名字一樣,我們可以通過 ip 來辨識主機。給他一個別名就是給一個 hostname 。
可以用 hostname 來查看你的主機名,要改主機名改他的配置文件
重啟生效
這樣主機名已經改掉了,還差一步。我們要讓主機名和我們的 ip 關聯在一起,修改 /etc/hosts 文件
例如:
兩邊都配置完成可以用 ssh slave 直接連接 slave 。如果你想自己免密連接自己那就按照上面的步驟給自己配置一份密匙就行了,動手試試吧。
SSH 協議介紹
數字簽名是什麼
SSH原理與運用(一):遠程登錄
SSH原理與運用(二):遠程操作與埠轉發
如何在CentOS 7上修改主機名
B. Windows下設置SSH免密
筆者以前在linu之間配置SSH秘鑰來完成免密,為了方便Windows Terminal使用,ssh又無法直接在命令行指定密碼,於是就需要配置一下Windows到linux的免密,公鑰的分發需要手動scp傳遞,新建公鑰文件時需要注意許可權問題。
1、Windows生成密鑰對
在cmd運行ssh-keygen -t rsa ,在目錄下生成一個 .ssh 文件夾,其中包含私鑰文件 id_rsa 和公鑰文件 id_rsa.pub。
2、將公鑰復制到遠程主機
在Linux中有ssh--id命令將公鑰復制到遠程主機,但是Windows下可沒有哦,那麼就需要手動分發。下面使用scp命令來遠程傳遞文件,也可以使用winscp可視化操作。
scp id_rsa.pub [email protected]:/home/pi/.ssh
然後進入到遠程主機將id_rsa.pub重命名為authorized_keys。
mv id_rsa.pub authorized_keys
為了保存公鑰也可以cat id_rsa.pub >> authorized_keys,或cp id_rsa.pub authorized_keys 。
3、配置完成後測試正常。
上面的是Windows登陸樹莓派免密配置,但是筆者配置Windows登陸centos7虛擬機時無法完成公鑰認證,導致免密失敗。
查看調試信息:ssh -v [email protected] ,感覺是無法認證公鑰。
關閉centos7的/etc/ssh/sshd_config配置文件中秘密認證登陸後:Permission denied (publickey,gssapi-keyex,gssapi-with-mic),應該是配置文件的錯誤。密鑰在樹莓派上可以正常識別認證的。但是筆者測試修改了一個幾個配置條目都不行,都不知道那裡有問題,帶以後再工作中解決吧,一時半會也搞不定。
2021年3月9日:
筆者在紅帽redhag生產系統上查看/etc/ssh/sshd_config配置文件,發現配置文件是保持默認的,都沒有修改,但是在末尾添加了一個AllowUsers,筆者將其修改後加入到centos系統中但是還是不行。
AllowUsers *@192.168.*.*
最後找到了一個許可權問題,即使authorized_keys文件許可權問題,因為是筆者在.ssh目錄下新建的文件的默認許可權是-rw-rw-r-- (664),對於authorized_keys來說許可權過大,修改為644後就可以了。
測試結果如下。
還有可以免去輸入用戶的麻煩,這就需要解決解決本地登陸用戶與遠程登陸用戶不一致的問題。在.ssh文件夾下新建config文件,並寫入ip和用戶名信息。接下來就可以使用ssh mycentos來免密免用戶登陸了。
C. Windows ssh 免密登錄
做這個目的也是平常工作里遇到的問題,一個是使用jupiter lab進行本地數據重定向時,需要輸入密碼,二是使用scp進行本地遠端文件互傳時需要輸入密碼。對我我這么懶的人來說這么可以這么麻煩呢,打開瀏覽器一陣猛搜,其實設置起來很簡單。
原理大概就是,在本地生成一個ssh公鑰,在伺服器端把這個公鑰放入ssh相關的配置文件里,你的這個伺服器賬號就認識生了成這個公鑰的電腦了,他倆熟了就不用通行證啦(瞎比比的,個人理解)。
設置過程
D. ssh配置免密登錄
假設有兩台Linux的伺服器,A(192.168.240.1)、B(192.168.240.2),現在想通過A伺服器免密登錄B伺服器,那麼首先需要將A伺服器的SSH公鑰復制到B伺服器的授權列表文件中(就是authorized_keys文件中)
E. Linux 配置SSH免密登錄
【比如:Jenkins構建時都是以jenkins用戶進行操作,所以要以jeknins用戶來配置免密鑰登錄。】
su - root
ssh-keygen -t rsa
A
[sjfuser@jenkins ~]$ ll /root/.ssh/
-rw-------. 1 sjfuser sjfuser 1671 4月 19 05:10 id_rsa
-rw-r--r--. 1 sjfuser sjfuser 398 4月 19 05:10 id_rsa.pub
-rw-r--r--. 1 sjfuser sjfuser 417 4月 19 05:08 known_hosts
B
-rw------- 1 root root 1217 Apr 21 10:46 /root/.ssh/authorized_keys
將此公鑰寫入任何一台遠程主機的/root/.ssh/authorized_keys後,便可通過密鑰登陸到遠程主機。
任何一台主機,拿到該密鑰id_rsa後,便可登陸寫入了該公鑰id_rsa.pub的主機。
如果添加指紋的時候提示添加失敗,是因為你以前添加過了這個ip的指紋。
解決辦法:將.ssh目錄的known_hosts文件刪除掉。也可以打開這個文件把對應ip的那條記錄刪除。
https://blog.csdn.net/qq_30059235/article/details/103890477
https://blog.csdn.net/fireofjava/article/details/40624215
F. ssh PublicKey免密登錄伺服器
建立PublicKey登陸步驟其實非常簡單,總結來說就是將客戶端生成的的ssh public key添加到伺服器的 ~/.ssh/authorized_keys 文件中,即可實現ssh的免密碼登錄。
在客戶端生成公鑰密鑰 附一篇 ssh-keygen 基本用法
然後一路回車, 使用默認值即可
使用 ls 命令可以看到當前目錄下的文件,有了個 id_rsa 和 id_rsa.pub ,前者是密鑰,後者是公鑰。
查看公鑰
復制公鑰
先嘗試進入 .ssh 看看目錄是否存在
若不存在則新建一個
然後修改許可權
接著再進入.ssh,然後修改將公鑰添加到authorized_keys
按 i ,然後將剛剛復制的密鑰粘貼到這里,按 esc ,再按 : ,輸入 wq 保存並退出
接著修改許可權
做好配置之後,通過ssh可以直接登錄了。
我們可以利用ssh的配置文件來簡化我們登陸的操作
配置文件在 ~/.ssh/config
我們可以修改這個文件(如果不存在則新建一個)
YourName可以改成任意名字
如果修改了埠則需要加上 Port 參數
還有各種各樣的參數可以查看幫助
配置完後可以這樣登陸伺服器
Enjoy it~
G. 阿里雲主機ssh 免密碼登錄
阿里雲主機ssh 免密碼登錄
操作系統: CentOS 7.0 64位
CPU: 1 核
公網IP: 78.129.23.45
用戶名: root
密碼:bugaosuni
我在VMware下安裝的Ubuntu 14.04.本文的主要目的就是在Ubuntu上能夠免密碼登錄雲主機。
具體設置步驟
Ubuntu 客戶端
在該文件夾下就會產生三個文件夾:id_rsa,id_rsa.pub,know_hosts。
id_rsa:存儲私鑰,記得只能自己看哦。別人那到這個文件就完蛋蛋咯。
id_rsa.pub:存儲公鑰,用來通信加密使用,有了這個人家才能確定這是你。
scp id_ rsa.pub [email protected]:/root/.ssh/id_ rsa.pub
Note:雲主機上沒有.ssh/文件時,你要自己建立一個。
雲主機端
rm id_rsa.pub
Ubuntu 客戶端
這個時候就可以登錄雲主機了
ssh [email protected]
scp遠程拷貝文件時提示錯誤:
Warning: Permanently added '10.0.0.182' (RSA) to the list of known hosts.
Permission denied (publickey).
解決:
登錄10.0.0.182,將/etc/ssh/sshd_config文件中的PasswordAuthentication no 改為PasswordAuthentication yes
重啟sshd服務:/etc/init.d/sshd restart
問題解決。
原因:scp是基於ssh的拷貝服務,ssh在沒有密鑰登錄的情況下,禁用了密碼登錄,故出現如上錯誤。
服務端SSH 服務配置了禁止root用戶登錄策略。
處理辦法
說明:相關策略可以提高伺服器的安全性。請用戶基於安全性和易用性權衡後,再確定是否需要修改相關配置。
要解決此問題,請進行如下配置檢查和修改:
參數說明:
未配置該參數,或者將參數值配置為 yes (默認情況),都允許 root 用戶登錄。只有顯示的設置為 no 時,才會阻斷root 用戶登錄。
該參數只會影響用戶的 SSH 登錄,不影響用戶通過 管理終端 等其它方式登錄系統。
如果需要修改相關策略配置,在繼續之前建議進行文件備份。
使用 vi 等編輯器,將參數值設置為 yes,或者整個刪除或注釋(在最開頭添加 # 號)整行配置。比如:# PermitRootLogin yes
使用如下指令重啟 SSH 服務:service sshd restart
嘗試再次使用 root 用戶登錄伺服器。
出現的問題以及解決方案
當出現Permission denied (publickey,gssapi-keyex,gssapi-with-mic) 警告的時候,恭喜你,你已經離成功很近了。
遠程主機這里設為slave2,用戶為Hadoop。
本地主機設為slave1
以下都是在遠程主機slave2上的配置,使得slave1可以免密碼連接到slave2上。如果想免密碼互聯,原理一樣的,在slave1上也這么配置即可!
(1)首先:配置ssh伺服器配置文件。
在root 用戶下才能配置。
vi /etc/ssh/sshd_config
許可權設為no:
如果前面有# 號,將#號去掉,之後將yes修改為no。
修改之後為:
PermitRootLogin no
UsePAM no
PasswordAuthentication no
許可權設為yes:
RSAAuthentication yes
PubkeyAuthentication yes
(2)重啟sshd服務
systemctl restart sshd.service
systemctl status sshd.service #查看ssh服務的狀態
正常情況下應該是Active:active(running)
(3)修改文件夾以及文件的許可權。
(4)在slave1上進行測試
ssh slave2
今天處理 ssh連接至 ubuntu 伺服器時,提示以下錯誤:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
da:f7:3e:ba:f7:00:e6:44:76:f2:58:6e:48:******.
Please contact your system administrator.
Add correct host key in /用戶home目錄/.ssh/known_hosts to get rid of this message.
Offending RSA key in /用戶home目錄/.ssh/known_hosts:1
RSA host key for ip地址 has changed and you have requested strict checking.
Host key verification failed.
經過google,出現這個問題的原因是,第一次使用SSH連接時,會生成一個認證,儲存在客戶端的known_hosts中。
可使用以下指令查看:
ssh-keygen -l -f ~/.ssh/known_hosts
由於伺服器重新安裝系統了,所以會出現以上錯誤。
解決辦法
ssh-keygen -R 伺服器端的ip地址
會出現以下提示:
/用戶home目錄/.ssh/known_hosts updated.
Original contents retained as /用戶home目錄/.ssh/known_hosts.old
重新連線,出現以下提示:
The authenticity of host '192.168.3.10 (192.168.3.10)' can't be established.
RSA key fingerprint is da:f7:3e:ba:f7:00:e6:44:76:f2:58:6e:48:****.
Are you sure you want to continue connecting (yes/no)?
H. ssh 雙機互信:免密碼登錄設置步驟及常見問題
在 linux 系統管理中,設置免密碼登錄,進行機器的批量管理是最常用的一個方法。比如針對幾十甚至上百台線上機器,通常我們會設置一台「發布機」作為中央控制機對其它線上機器免密碼登錄,然後進行軟體、配置文件的分發、更新、部署。當然了,針對上面的問題,解決方案並非最優且唯一,比如你也可以用 expect 模擬自動輸入來完成自動登錄驗證這一過程,或者用現在一些開源的軟體自動化配置和部署工具,比如 Puppet,但這都不在本文的討論范疇,今天咱們要說的就是這種最原始、最有效、最直接的方式:免密碼登錄。
(1)問題:
假設:現有2台機器
1、個人機192.168.1.110
2、伺服器192.168.1.112
要使110無需密碼通過ssh登入112
(2)步驟
1、創建密鑰
2、復制公密到伺服器
3、添加公密到192.168.112的信任區域
註: 2,3兩步可由命令ssh--id一步到位
4、測試
此時整個步驟已經完成,你可以嘗試 ssh ip 或者 /etc/hosts 中的主機名試試。
(3)可能遇到的問題
1、在使用 ssh--id 錯誤提示
表現:
公鑰,私鑰已經生成,執行上述命令完畢出現如下錯誤:
$ ssh--id remote-machine
/usr/bin/ssh--id: ERROR: No identities found
解決方法:
g 之發現缺少公鑰路徑,通過 -i 加上即可:
2、ssh ip 可以成功登錄,ssh hostname 卻失敗
表現:
ssh hostname
ssh: connect to host localhost port 22: Connection refused
解決方法:
看下對方的主機名是不是在 /etc/hosts 文件中和 ip 做了映射,沒有就加上即可。
3、ssh 的配置目錄許可權問題
由於 ssh 的許可權直接關繫到伺服器的安全問題,因此 ssh 每次讀取配置都會校驗相關文件夾和文件的許可權,以防止許可權過大對外暴露。
表現:
設置了.ssh目錄,在authorized_keys設置了key後登錄還提示需要輸入密碼。
解決方法:
注意許可權,.ssh許可權700,authorized_keys許可權600,就KO啦!
chmod 700 ~/.ssh/
chmod 600 ~/.ssh/authorized_keys
4、ssh localhost:publickey 授權失敗
註:ssh可同時支持publickey和password兩種授權方式,publickey默認不開啟,需要配置為yes。
如果客戶端不存在.ssh/id_rsa,則使用password授權;存在則使用publickey授權;
如果publickey授權失敗,依然會繼續使用password授權。
不要設置 PasswordAuthentication no ,它的意思是禁止密碼登錄,這樣就只能本機登錄了!
5、ssh localhost:Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
最後重啟你的 linux 執行 ssh localhost
6、ssh localhost:需要密碼
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
7、ssh ip 或 hostname 均提示:connection refused
目標主機的ssh server端程序是否安裝、服務是否啟動,是否在偵聽22埠;
是否允許該用戶登錄;
本機是否設置了iptables規則,禁止了ssh的連入/連出;
具體請參考: http://hi..com/leejun_2005/item/bfc0ded296cb8ebf32db907e
(4)最後的問題
本文介紹的建立基於免密碼登錄,雙機互信的管理方式簡單、直接,但是安全就是個問題了,稍有不慎容易被一鍋端,建議加上防火牆的埠、ip 策略,有條件的話試試動態口令,這樣會更穩妥些。再有就是當機器規模達到上百、上千台的時候,如果對文件數據、機器狀態的實時同步、一致性的要求很高的時候,這種管理方式的弊端就出來了。
(5)Refer:
http://blogread.cn/it/article/6103?f=wb ssh--id幫你建立信任
http://www.lvtao.net/server/54.html ssh無密碼登入設置 ssh-keygen ssh--id
http://hi..com/leejun_2005/item/bfc0ded296cb8ebf32db907e SSH的安裝及登錄提示:connection refused的解決辦法
http://www.cnblogs.com/qcly/archive/2013/07/27/3219535.html 一次由SELinux引起的ssh公鑰認證失敗問題
I. Linux免密碼SSH登錄(公鑰登錄)
SSH有兩種登錄方式, 一是口令登錄, 即常規的用戶名密碼登錄; 二是公鑰登錄, 只要在server端配置好client端的公鑰, 就可以實現免密登錄. 控制端為client端, 遠程主機為server端, 下同.
在client端輸入命令然後一路回車
運行結束以後,在client端~/.ssh/目錄下,會新生成兩個文件: id_rsa.pub 和 id_rsa 。前者是你的公鑰,後者是你的私鑰。這時再輸入如下命令,將公鑰傳送到遠程主機host上面:
server端將用戶上傳的公鑰,保存在用戶主目錄的 ~/.ssh/authorized_keys 文件中。
原本以上配置就ok了,但是OpenWrt的ssh採用的是dropbear,一種輕量級的ssh服務。需要對其進行額外配置:
大功告成 ->
SSH參考資料: SSH原理與運用(一):遠程登錄
