ssh通過密鑰進行連接


sshd服務提供兩種安全驗證的方法:

基於口令的安全驗證:經過驗證帳號與密碼即可登陸到遠程主機。

基於密鑰的安全驗證:需要在本地生成"密鑰對"后將公鑰傳送至服務端,進行公共密鑰的比較。

使用密碼驗證終歸會存在着被駭客暴力破解或嗅探監聽的危險,其實也可以讓ssh服務基於密鑰進行安全驗證(可無需密碼驗證),步驟如下:

 

1.在本地主機中生成密鑰對

[root@wluat ~]# ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):      #回車或設置密鑰的存儲路徑
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):                   #回車或設置密鑰的密碼
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
92:9e:ae:cd:eb:40:a8:7c:ad:ac:af:89:c2:ce:16:fa root@wluat
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|   .   .         |
|  . . o S        |
|.o ... o         |
|+.....o          |
|=o+ .=           |
|=BE+.o*.         |
+-----------------+

注:這里為了ssh連接不要再輸入密碼,沒有輸入密碼,而是直接回車。

 

2.將生成好的公鑰密鑰傳送至遠程主機:

ssh-copy-id -i ~/.ssh/id_rsa.pub user@hostname

[root@wluat ~]# ssh-copy-id 192.168.0.80
The authenticity of host '192.168.0.80 (192.168.0.80)' can't be established.
RSA key fingerprint is af:b9:dc:e7:7d:45:d7:e0:ae:24:0f:b1:a3:1f:94:48.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.80' (RSA) to the list of known hosts.
root@192.168.0.80's password: 
Now try logging into the machine, with "ssh '192.168.0.80'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

注:其是這個就相當於在服務器端建立了~/.ssh,目錄,並將公鑰寫到了遠程主機的"~/.ssh/authorized_keys"文件中,文件的權限如下:

root@wls12c ~]$ ll .ssh
總用量 8
-rw------- 1 root root  392 8月  17 14:15 authorized_keys
-rw-r--r-- 1 root root 1586 8月  17 12:01 known_hosts
[root@wls12c ~]$ ll .ssh/authorized_keys 
-rw------- 1 root root 392 8月  17 14:15 .ssh/authorized_keys

 如果是傳送到遠程主機的普通用戶,authorized_keys的權限並不是600,需要手工修改,否則報如下錯誤:

[root@wluat ~]# ssh weblogic@192.168.0.80
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

 

或者手工復制公鑰到認證文件:

cat ~/.ssh/id_rsa.pub | ssh user@server "cat - >> ~/.ssh/authorized_keys"

 

3.測試,連接遠程主機的效果

ssh -i ~/.ssh/id_rsa user@hostname
[root@wluat ~]# ssh 192.168.0.80
Last login: Wed Aug 17 14:21:51 2016 from 192.168.0.150
[root@wls12c ~]$

已經實現了不要通過密碼驗證了

 

注意:第一次用ssh連接服務端的時候會把要服務端的公鑰放到客戶端的~/.ssh/know_hosts來進行驗證,會彈出一個警告:

[root@wluat ssh]# ssh 192.168.0.80
The authenticity of host '192.168.0.80 (192.168.0.80)' can't be established.
RSA key fingerprint is 93:6b:6d:07:34:8c:f5:e0:30:60:34:e0:8d:81:09:c8.
Are you sure you want to continue connecting (yes/no)?

  為了安全,我們可以在80的機器上檢查指紋,確定是要連接的主機

ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub
2048 93:6b:6d:07:34:8c:f5:e0:30:60:34:e0:8d:81:09:c8 /etc/ssh/ssh_host_rsa_key.pub

  鍵入yes接受密鑰並確認連接。您將看到一個通知,說明服務器已被添加到已知主機的列表中,並提示您輸入密碼:

 

 如果前面有把私鑰加密,可以使用ssh-agent讓機器記住密鑰的密碼,從而避免輸入:

ssh-agent bash
ssh-add  密鑰

  

配置別名登錄遠程機器,編輯~/.ssh/config

Host ecs    // 輸入遠程機器別名
HostName 192.*.*.*   // 輸入遠程機器IP地址
Port 22   // 輸入端口號,默認為22
User tomcat   // 輸入登錄賬號
IdentityFile ~/.ssh/ecs.pem // 輸入.pem私鑰文件在本機的地址

然后直接ssh tomcat就登錄到遠程機器的tomcat用戶了。

 

4.修改遠程主機的配置文件,讓登陸遠程主機只能通過密鑰登陸,而不能通過密碼驗證登錄。

vim /etc/ssh/sshd_config

PasswordAuthentication no
PubkeyAuthentication yes

 

5.重啟遠程主機的sshd服務

[root@wls12c ~]$ service sshd restart

 

6.配置Xshell通過密鑰登陸

工具-->用戶密鑰管理者

然后導入本地主機生成的“.ssh/id_rsa”私鑰,

然后刪除本地主機的私鑰   rm -rf .ssh/id_rsa 

將公鑰重命名  mv id_rsa.pub authorized_keys

並修改權限 chmod  700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys

就可以讓Xshell通過密鑰進行登陸了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM