ssh免密登錄linux服務器
Ssh免密登錄
sshd服務
sshd簡介:
SSH 密鑰為登錄 Linux 服務器提供了更好且安全的機制。運行 ssh-keygen 後,將會生成公私密鑰對。你可以將公鑰放置到任意服務器,從持有私鑰的客戶端連接到服務器的時,會用它來解鎖。兩者匹配時,系統無需密碼就能解除鎖定。
官方維護文檔:https://www.ssh.com/ssh/
參考文檔:https://www.cnblogs.com/ioveNature/p/7919115.html
https://www.cnblogs.com/panblack/p/Secure_ssh_trust_connection.html
一、服務器上創建用戶:
在服務器上創建普通用戶,為每個人都分配一個自己的用戶。
# groupadd dd # useradd -g dd dd1 [root@localhost ~]# passwd dd1 Changing password for user dd1. New password: BAD PASSWORD: The password is shorter than 7 characters Retype new password: passwd: all authentication tokens updated successfully.
# 這個密碼管理員管理好,不用給其他人。稍後,用戶是通過他們的公鑰
二、windows上生成密鑰免密連接服務器:
Xshell配置免密登錄:
參考:
https://www.cnblogs.com/ioveNature/p/7919115.html
秘鑰生成
生成公鑰
工具 -> 新建用戶秘鑰生成向導 ->
下一步 ->
點擊下一步,輸入密碼:
點擊下一步
點擊保存為文件,完成。
生成私鑰
工具 -> 用戶秘鑰管理者
選中秘鑰類型 -> 導出
保存,輸入之前設置的秘鑰保護密碼,生成私鑰
至此,生成了一對 公鑰-私鑰 對。
在服務器上添加公鑰權限
- 上傳公鑰到服務器的
- 執行命令cat id_rsa_2048.pub >> authorized_keys 與 chmod 600 authorized_keys
- 然後執行 cat authorized_keys即可看到公鑰內容已經添加到文件中去了。
在XShell中登錄
- 文件-> 新建
名稱沒有太大限制。隨意填寫,這裏填寫的是rsa-test。
接著填寫主機的IP地址,也就是所要連接的服務器的IP地址。
- 填寫 用戶身份驗證 信息
這裏的密碼為前面所設置的秘鑰的保密碼,用戶名為服務器的賬號用戶名。
在多終端的XShell上進行登錄
如果在另外一臺電腦上連接這個服務器賬號,則除了前面一步的配置之外,還需要手動添加私鑰。具體方法為:
工具-> 用戶秘鑰管理者
選擇 導入,然後選擇私鑰之後選擇打開即可正常連接。
備註
如果是服務器管理員,上面有多個用戶賬號,則需要為每一個用戶進行添加權限,這時候除了前面的公鑰信息之外,還要綁定用戶名。
參考
- Xshell配置ssh免密碼登錄-密鑰公鑰(Public key)與私鑰(Private Key)登錄
Securecry上配置免密登錄:
參考:https://blog.csdn.net/wangquannetwork/article/details/46062675
三、linux上生成密鑰對免密連接服務器:
1、切換成對應的用戶
# su dd
2、使用ssh-keygen生成key,註釋可以加郵件,
[dd@localhost ~]$ ssh-keygen -t rsa -C "php key" Generating public/private rsa key pair. Enter file in which to save the key (/home/dd/.ssh/id_rsa): # 要求輸入密鑰保存位置 Enter passphrase (empty for no passphrase): # 輸入密鑰口令 Enter same passphrase again: # 確認密鑰口令 Your identification has been saved in /home/dd/.ssh/id_rsa. Your public key has been saved in /home/dd/.ssh/id_rsa.pub. The key fingerprint is: cc:67:bb:e7:44:e4:f0:f9:d3:c3:20:98:bd:55:f1:35 php key The key‘s randomart image is: +--[ RSA 2048]----+ | E.| | =| | . . ..| | o += .. | | Sooo=o | | o o+.o. | | ... oo.| | o. ..| | .o. | +-----------------+ [dd@localhost ~]$ ls /home/dd/.ssh/ -a . .. authorized_keys id_rsa id_rsa.pub
3、使用ssh-copy-id把本機的公鑰文件發送到目標服務器192.168.188.129上。
[dd@localhost ~]$ ssh-copy-id -i ~/.ssh/id_rsa [email protected] /bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys [email protected]‘s password: #要求輸入對方主機dd1的密碼 Number of key(s) added: 1 Now try logging into the machine, with: "ssh ‘[email protected]‘" and check to make sure that only the key(s) you wanted were added.
註意:這裏會暴露192.168.188.129上用戶dd1的密碼。
避免暴露密碼方法:
a、使用rsync將公鑰文件傳輸過去
b、將id_rsa的內容復制出來,然後追加到192.168.188.129裏的authorized_keys裏。
4、設置.ssh/權限
在linux操作主機上設置:
# [dd@localhost ~]$ chmod 700 ~/.ssh/ # [dd@localhost ~]$ chmod 600 ~/.ssh/* # [dd@localhost .ssh]$ ll total 16 -rw------- 1 dd dd 381 Aug 30 16:04 authorized_keys -rw------- 1 dd dd 1766 Aug 30 17:29 id_rsa -rw------- 1 dd dd 389 Aug 30 17:29 id_rsa.pub -rw------- 1 dd dd 354 Aug 30 18:24 known_hosts
在linux服務器上設置:
# [root@localhost ~]$ chmod 700 /home/dd1/.ssh/ # [root@localhost ~]$ chmod 600 /home/dd1/.ssh/* # [root@localhost ~]# ll /home/dd1/.ssh/ total 8 -rw-------. 1 dd1 dd 389 Aug 30 20:52 authorized_keys -rw-------. 1 dd1 dd 354 Aug 31 09:57 known_hosts
5、這時候連接,就能夠正常了。
[dd@localhost .ssh]$ ssh [email protected] Enter passphrase for key ‘/home/dd/.ssh/id_rsa‘: # 需要輸入密鑰口令 Last login: Thu Aug 30 20:11:42 2018 [dd1@localhost ~]$ # 如果在ssh-keygen生成密鑰時,沒有輸入密鑰口令,而是一路回車,那麽這裏用ssh連接的時候也不會要求輸入口令了。但是這樣很不安全,因為如果別人把你的私鑰文件拿去了,他也就不用密碼登錄了,服務器就是他的了。(如果沒有口令,想要增加,建議把之前的刪掉,重新開始弄。) # 如果在ssh-keygen生成密鑰時,輸入了密鑰口令,那麽在這裏用ssh連接的時候,就需要輸入就需要輸入口令。(推薦)參考:https://www.cnblogs.com/panblack/p/Secure_ssh_trust_connection.html
缺陷:
但是這樣很麻煩,雖然不用輸入服務器密碼了,但是需要輸入口令,很不利於以後的自動化運維,所以我們還需要配置一下ssh-agent。
6、ssh-agent代理。
啟動代理守護進程:
[dd@localhost .ssh]$ eval `ssh-agent` Agent pid 26506
將私鑰添加到代理守護進程:
[dd@localhost .ssh]$ ssh-add Enter passphrase for /home/dd/.ssh/id_rsa: Identity added: /home/dd/.ssh/id_rsa (/home/dd/.ssh/id_rsa)
試試連接目標主機:
[dd@localhost .ssh]$ ssh [email protected] Last login: Thu Aug 30 20:52:41 2018 from 192.168.188.128 [dd1@localhost ~]$
OK了!
這時候,我們在本機去連接服務器192.168.188.129就不在需要密碼和口令了。
四、在服務器上關閉密碼連接。
在192.168.188.129服務器上設置:
[root@localhost .ssh]# vim /etc/ssh/sshd_config RSAAuthentication yes PubkeyAuthentication yes # 公鑰認證默認也是yes的,但是註釋了,關閉要改為no AuthorizedKeysFile %h/.ssh/authorized_keys #為了安全性,可以修改SSH端口 Port 222 #禁用root賬戶登錄,非必要,但為了安全性,請配置 PermitRootLogin no #有了證書登錄了,就禁用密碼登錄吧,密碼登錄改為no,安全要緊 PasswordAuthentication no
ssh免密登錄linux服務器