ssh 配置無密碼登錄


 免密

 下框中在管理機上運行:

[root@master ~]# ssh-keygen -t rsa  #它在/root/.ssh下生成id_rsa和id_rsa.pub兩個文件
[root@master ~]# ssh-copy-id root@192.168.1.128  #將公鑰發給被管理端  #或者手動把生成的秘鑰存放到要遠程的機器的/root/.ssh/目錄下權限必須設置為600
[root@master ~]# ssh root@192.168.1.128 
[root@master ~]# ssh-agent bash  #私鑰交給ssh-agent保管
[root@master ~]# ssh-add  ~/.ssh/id_rsa #向ssh-agent添加公鑰身份驗證

$ssh-keygen -t rsa -P '' -f /root/.ssh/id_rsa
#-t 指定rsa 加密算法 #-P 指定密碼,次數為空 #-f 指定key文件路徑

ssh -i ~/.ssh/id_rsa_test2 root@10.1.0.3    #指定對應私鑰文件連接遠程用戶

 
啟動ssh-agent
如下兩種方式均可啟動ssh-gent
方式一:創建子shell,在子shell中運行ssh-agent進程,退出子shell自動結束代理。
ssh-agent $SHELL

方式二:單獨啟動一個代理進程,退出當前shell時最好使用ssh-agent -k關閉對應代理
eval `ssh-agent`

關閉ssh-agent
ssh-agent -k

將私鑰添加到ssh代理
ssh-add ~/.ssh/key_name

查看代理中的私鑰
ssh-add -l

查看代理中的私鑰對應的公鑰
ssh-add -L

移除指定的私鑰
ssh-add -d /path/of/key/key_name

移除代理中的所有私鑰
ssh-add -D

鎖定ssh代理
鎖定時需要指定鎖定密碼,鎖定后的ssh代理暫時不能幫助我們管理私鑰
ssh-add -x

解鎖ssh代理
解鎖時需要輸入創建鎖時設定的密碼,解鎖后ssh代理可正常工作
ssh-add -X 

  

5 使用ssh-agent

ssh-agent

ssh-agent是密鑰管理器

         運行ssh-agent以后,使用ssh-add將私鑰交給ssh-agent保管,其他程序需要身份驗證的時候可以將驗證申請交給ssh-agent來完成整個認證過程

好處1:不用重復輸入密碼
如果私鑰有密碼的話,照例會被要求輸入一次密碼,在這之后ssh-agent可直接使用該私鑰,無需再次密碼認證。

好處2:不用到處部署私鑰
假設私鑰分別可以登錄同一內網的主機 A 和主機 B,出於一些原因,不能直接登錄 B。可以通過在 A 上部署私鑰或者設置 Forwarding(轉發) 登錄 B,也可以轉發認證代理連接在 A 上面使用ssh-agent私鑰登錄 B;可以在A上直接sftp傳文件到B上。

如這邊有一台機器是local,能通過公鑰直接登陸server1和server2。server1和server2之間無公鑰登陸。

現在要在server1上直接登陸server2,在local上執行

$ssh-agent bash $ssh-add ~/.ssh/id_rsa 

執行了之后就將私鑰給ssh-agent保管了,server1上面登陸server2的時候,需要私鑰驗證的時候直接找ssh-agent要就可以了
接下來登陸server1,注意-A

ssh -A server1

可以發現server1上多了/tmp/ssh-xxxxxxxxx/agent.xxxxx的socket,之后神奇的事發生了,在 server1上可直接進server2,只需執行如下命令,如果加了-A則可以繼續ssh forwarding(轉發) ,以至無限的機器forwarding。
ssh (-A) server2
同樣的原理可以試一下sftp, scp等基於ssh的命令。

如運行ssh-add,遇到Could not open a connection to your authentication agent.。

解決:需要ssh-agent啟動bash,或者說把bash掛到ssh-agent下面。

$ssh-agent bash --login -i

SSH的高級應用
使用遠程主機不中斷的跑程序

當我們利用ssh在遠程主機上跑程序的時候,只要關閉了終端就會中斷ssh連接,然后遠程主機上正在跑的程序或者服務就會自動停止運行。我們可以利用 nohup + 需要運行的程序 使運行的程序在切斷ssh連接的時候仍然能夠繼續在遠程主機中運行。nohup即no hang up(不掛起)。

除此之外還有很多遠程操作應用,包括 數據傳輸、端口操作(將不加密的網絡連接綁定到ssh端口實現間接加密) 等等,可以參考柚子皮大神的博客:https://blog.csdn.net/pipisorry/article/details/52269785
-------------------

原理介紹:

SSH 為建立在應用層和傳輸層基礎上的安全協議。SSH 是目前較可靠,專為遠程登錄會話和其他網絡服務提供安全性的協議。利用SSH 協議可以有效防止遠程管理過程中的信息泄露問題。

      從客戶端來看,SSH提供兩種級別的安全驗證:

 

1、基於口令的驗證

 

     只要知道帳號和口令,就可以登錄到遠程主機。所有傳輸的數據都會被加密,但缺點是:不能保證你正在連接的服務器就是你想連接的服務器。以下是我畫了的登錄驗證流程:

 

 

 

 

      當第一次鏈接遠程主機時,會提示您當前主機的”公鑰指紋”,詢問您是否繼續,如果選擇繼續后就可以輸入密碼進行登錄了,當遠程的主機接受以后,該台服務器的公鑰就會保存到~/.ssh/known_hosts文件中。

 

2、基於密鑰的驗證

 

    這種驗證的前提是客戶端需要生成一對密鑰,將公鑰放到需訪問的遠程服務器。這種驗證比上一種的好處是,不能仿冒真正的服務器,因為要仿冒必須拿到客戶端生成的公鑰。缺點就是驗證等待過程稍長些。

 

 

 

 

如何生成密鑰:

 

1、在客戶端打開終端,執行ssh-keygen,該命令會默認在~/.ssh/目錄下創建id_rsa、id_rsa.pub兩個文件,分別為您的公鑰和私鑰。

 

2、將公鑰id_rsa.pub文件拷貝到服務器端的~/.ssh/authorized_keys文件中,有三種方法:

 

  • 通過scp拷貝:
    •  例:scp -P 22 ~/.ssh/id_rsa.pub user@host:~/authorized_keys     #可選參數-P代表指定用端口號22
  • 通過ssh-copyid程序:
    •  例:ssh-copy-id user@host  #此種方式簡單,不需追加改文件名,但不能指定端口號,默認以22端口
  • 通過cat方法:
    •  例:cat ~/.ssh/id_rsa.pub | ssh -p 22 user@host ‘cat >> ~/.ssh/authorized_keys’

----------------------------------------------------------------------------------------------------

免密碼登錄原理

ssh免密碼登錄原理圖 
圖解,server A免登錄到server B: 
1.在A上生成公鑰私鑰。 
2.將公鑰拷貝給server B,要重命名成authorized_keys(從英文名就知道含義了) 
3.Server A向Server B發送一個連接請求。 
4.Server B得到Server A的信息后,在authorized_key中查找,如果有相應的用戶名和IP,則隨機生成一個字符串,並用Server A的公鑰加密,發送給Server A。 
5.Server A得到Server B發來的消息后,使用私鑰進行解密,然后將解密后的字符串發送給Server B。Server B進行和生成的對比,如果一致,則允許免登錄。 
總之:A要免密碼登錄到B,B首先要擁有A的公鑰,然后B要做一次加密驗證。對於非對稱加密,公鑰加密的密文不能公鑰解開,只能私鑰解開。

 






免責聲明!

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



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