linux使用:配置SSH免密碼登陸

来源:http://www.cnblogs.com/erygreat/archive/2017/07/22/7222353.html
-Advertisement-
Play Games

在應用中我們經常會登陸其他的主機,每次都需要輸入用戶名和密碼。另外在hadoop的使用中也會使用ssh命令去連接其它的主機。我們可以設置SSH免密碼登陸來實現其他主機登錄該主機是不用輸入密碼。 現在我們有兩台測試的linux的虛擬機,我們稱之為主機1和主機2。ip分別為192.168.1.101和1 ...


在應用中我們經常會登陸其他的主機,每次都需要輸入用戶名和密碼。另外在hadoop的使用中也會使用ssh命令去連接其它的主機。我們可以設置SSH免密碼登陸來實現其他主機登錄該主機是不用輸入密碼。

現在我們有兩台測試的linux的虛擬機,我們稱之為主機1和主機2。ip分別為192.168.1.101和192.168.1.102,我們這次的目的是用主機主機1的grid用戶無密碼連接主機2的grid用戶

1. 在主機1生成密鑰

先解釋一下,三個提示信息

  • Enter file in which to save the key (/home/admin/.ssh/id_rsa)文件保存的位置,預設為當前"用戶身份"的主文件夾下的.ssh文件夾下的id_rsa
  • Enter passphrase (empty for no passphrase) 輸入連接密碼,預設為空
  • Enter same passphrase again 再次輸入密碼,預設為空

我們在主機1中創建一個密鑰,由於所有設置都是用的預設的,因此直接三個回車

[grid@tiny01 ~]$ ssh-keygen -t rsa

我們可以查看一下當前用戶主目錄下的.ssh文件夾

[grid@tiny01 ~]$ cd ~/.ssh
[grid@tiny01 .ssh]$ pwd
/home/grid/.ssh
[grid@tiny01 .ssh]$ ll
total 12
-rw-------. 1 grid grid 1675 Jul 22 13:38 id_rsa
-rw-r--r--. 1 grid grid  393 Jul 22 13:38 id_rsa.pub
-rw-r--r--. 1 grid grid  402 Jul 22 12:35 known_hosts

可以發現下麵有兩個文件:id_rsaid_rsa.pub其中id_rsa.pub是公鑰,id_pub是私鑰

2. 將主機1公鑰分發到主機2下

我們可以直接使用ssh-copy-id 主機名命令將公鑰拷貝到對方的主機下,例如:

[grid@tiny01 ~]$ ssh-copy-id tiny02
grid@tiny02's password:
Now try logging into the machine, with "ssh 'tiny02'", and check in:

  .ssh/authorized_keys

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

實際上ssh-copy-id 命令就是將當前主機id_rsa.pub中的內容,追加到目標主機上的~/.ssh/authorized_keys文件上,如果該文件不存在,則創建

3. 登錄到主機2
我們現在就可以登錄主機2了

login as: admin
[email protected]'s password:
Last login: Tue Mar  7 05:10:19 2017 from 192.168.132.59
[admin@tiny ~]$ ssh 192.168.132.114
Last login: Tue Mar  7 05:13:28 2017 from 192.168.132.115
[admin@tiny ~]$

測試成功

4.關於SSH連接中流程問題(以下內容純屬於一本正經的胡說八道)

前面說到SSH是將公鑰發給別的主機,然後別的主機用公鑰加密,然後發送回來的嗎?所以不應該是將公鑰發送給其他主機上,然後其他主機來連接這台主機嗎?為什麼在這裡變為了講公鑰發送給其他主機,然後去連接其它主機,不應該是被連接嗎?其實我也不知道,看了SSH協議交互過程這篇博客,我做出了一下猜測

當我們沒有設置SSH免密碼的時候,我們需要輸入密碼才能進行遠程連接。所以他的連接過程可能是這樣子:

  • 客戶端向伺服器發出了連接請求
  • 伺服器向客戶端發出了公鑰
  • 客戶端將用戶名、密碼、自己的公鑰等信息通過伺服器提供的公鑰加密發送回了伺服器
  • 伺服器對認證信息進行比對,認證正確後通過認證
  • 伺服器向客戶端返回認證通過的響應,並且此後由於雙方都有對方的公鑰因此所有的通訊都進行加密傳輸。
  • 客戶端將要執行的命令加密後傳給伺服器
  • 伺服器解密並應執行命令
  • 伺服器將執行的命令的結果返回給客戶端

而免密碼登陸的時候連接過程呢?由於此時伺服器已經有了客戶端的公鑰,可能是這樣子的

  • 客戶端向伺服器發出了連接請求
  • 伺服器向客戶端發出了公鑰
  • 客戶端將publickey認證所需的信息發送給了伺服器
  • 伺服器對認證信息進行比對,認證正確後通過認證
  • 伺服器向客戶端返回認證通過的響應,並且此後由於雙方都有對方的公鑰因此所有的通訊都進行加密傳輸。
  • 客戶端將要執行的命令加密後傳給伺服器
  • 伺服器解密並應執行命令
  • 伺服器將執行的命令的結果返回給客戶端

發現其實二者是一樣的只不過就是認證方式不同,一個是password認證,一個是publickey認證,而當伺服器將客戶端的公鑰配到authorized_keys就表示已經同意了對方的免密碼連接。需要註意一個問題,password認證所用的密鑰和publickey認證所用的密鑰是不同的。password認證所用的密鑰在/etc/ssh下,而publickey認證所用的密鑰在~/.ssh下,因此publickey認證所用的公鑰在傳輸過程中是加密的。

而我們換一種情況考慮,就是假設是公鑰給誰就是允許誰免密碼連接的情況,會有以下幾個問題:

  1. 如果公鑰是誰獲得誰就可以免密碼連接。那麼由於公鑰是公開的,因此伺服器相當於誰都可以登錄的。
  2. 那麼我們加一個認證啊,因為password認證不能用,而publickey認證也不能用,因此我們需要創建一個認證方式,例如:我們在客戶端請求免密碼的時候,設置一個隨機的字元串,發送給客戶端,然後客戶端通過這串字元串當做認證條件呢。恩,可以。如果這樣子,我們都不許配置免密碼了,直接寫一個腳本,把伺服器對應用戶名和密碼放進去就好了,也能實現這個效果。

其實我們只要區分免密碼和SSH加密不同就可以了:

  • SSH加密本質是保持通訊過程的安全,他主要目的在通訊安全上,至於你們通訊過程,例如是否認證,伺服器是否允許客戶端的訪問不是他需要關心的問題。
  • 免密碼目的是免除認證,SSH加密只是他防止認證過程中認證信息被監聽的一種手段,也不是他的目的。

因此雖然可能有許多種免密碼的方式,但是我們只要找出來一種最為安全、高效的就可以了。沒有必要糾結於為什麼不怎麼怎麼做。

5.參考資料
SSH協議交互過程


需要註意的問題:

1. 關於自己主機登陸自己的主機也需要密碼?
我們可以測試一下這個問題:

[root@tiny1 ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:49:E9:9D
          inet addr:192.168.132.113  Bcast:192.168.132.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe49:e99d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2648 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1725 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:250583 (244.7 KiB)  TX bytes:187492 (183.0 KiB)
          Interrupt:19 Base address:0x2024

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:10 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:840 (840.0 b)  TX bytes:840 (840.0 b)

[root@tiny1 ~]# ssh 192.168.132.113
The authenticity of host '192.168.132.113 (192.168.132.113)' can't be established.
RSA key fingerprint is 67:91:3a:e4:97:af:9d:01:37:5f:4a:ed:14:dc:04:46.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.132.113' (RSA) to the list of known hosts.
[email protected]'s password:
Last login: Tue Mar  7 12:09:45 2017 from 192.168.132.59

所以在我們設置免密碼登陸的時候我們也需要對自己的主機進行設置

2. root用戶之間為什麼設置卻不可以

root用戶預設設置是不可以使用ssh免密碼登陸的,但是可以修改相關配置,使其能夠使用ssh免密碼登陸,但是在此不做介紹


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 用戶和用戶組及許可權管理: 一:基本概念 linux是一個多任務(multi-task)多用戶(multi-user)的操作系統,每個用戶和用戶組都有自己的ID號UID GID,每個用戶都有自己的家目錄不能隨意訪問其他用戶的家目錄,管理員root除外。 用戶的分類:(以centos7.x為例) 管理員 ...
  • 常說Linux上有文本處理的三劍客,grep、sed和awk,本文就grep做出詳細的描述,並引出正則表達式。 grep 舉例1:匹配/etc/passwd下有frank的行 舉例2:匹配/etc/passwd下有frank的行,忽略大小寫 舉例3:匹配/etc/passwd下不能被bash匹配的行 ...
  • 已經那麼多年工作下來了,結果裝linux還是那麼 的費勁! 裝的是純凈版Ubuntu16.04版本,17.04怕不穩定就沒裝, 裝了發現VmwareTools是暗的,以前也遇到過這個問題,但是真的忘記了怎麼解決了。 弄了半天其實關鍵就是一句話,找到你Vmware的安裝目錄,裡面有個linux.iso ...
  • 度過了難熬的考試月時期之後,最近和小伙伴一起參加的的比賽進入了緊張的準備時期。在進行工作的時候,發現有很多基礎的知識點,自己不是很清楚以及瞭解,所以在想,要不就邊學習的時候邊寫下學習日記,以供自己後來不懂的時候查看,同時以希望自己的一些所得能幫助到其他人。共勉之~ ...
  • CentOS 6.7/Linux下設置IP地址 1:臨時修改: 1.1:修改IP地址 # ifconfig eth0 192.168.2.104 1.2:修改網關地址 # route add default gw 192.168.2.1 dev eth0 1.3:修改DNS # echo "name ...
  • Linux文件查找,詳細的介紹了locate和find命令的使用 ...
  • 為了能夠使用XShell來管理我們安裝好的CentOS7系統,所以我們要先設置CentOS7的網路使其能夠聯網。 1.選擇vmware的編輯,然後點擊虛擬網路編輯器 2.點擊更改設置(需要有管理員許可權) 3.選擇VMnet0為橋接模式,選擇自動或者網卡 4.打開“網路和共用中心”選擇“VMware ...
  • nfs服務是實現Linux和Linux之間的文件共用,nfs服務的搭建比較簡單。 現在介紹如何在ubuntu16.04系統中搭建nfs服務,ubuntu的搭建比紅帽的還要簡單。 1、安裝nfs服務 2、修改配置文件 修改內容如下: 各段表達的意思如下,根據實際進行修改 3、重啟nfs服務 到此,nf ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...