1. 程式人生 > >SSH原理和基本使用:ssh 安全配置 以及ssh key 認證登入

SSH原理和基本使用:ssh 安全配置 以及ssh key 認證登入

一、什麼是 SSH ?

     SSH全稱(Secure SHell)是一種網路協議,顧名思義就是非常安全的shell,主要用於計算機間加密傳輸。早期,網際網路通訊都是基於明文通訊,一旦被截獲,內容就暴露無遺。1995年,芬蘭學者Tatu Ylonen設計了SSH協議,將登入資訊全部加密,成為網際網路安全的一個基本解決方案,迅速在全世界獲得推廣,目前已經成為Linux系統的標準配置。SSH的主要目的是用來取代傳統的telnet 和 R 系列命令(rlogin, rsh, rexec 等)遠端登入和遠端執行命令的工具,實現對遠端登入和遠端執行命令加密,防止由於網路監聽而密碼洩露問題。

需要指出的是,SSH協議是IETF(Internet Engineering Task Force)的Network Working Group所制定的一種協議。SSH 只是一種協議(規範),存在很多實現方式,既有商業實現,也有開源實現。

ssh協議目前有SSH1和SSH2兩個主流版本,SSH2協議相容SSH1,強烈建議使用SSH2版本。目前實現SSH1和SSH2協議的主要軟體有OpenSSH 和SSH Communications Security Corporation 公司的SSH Communications 軟體。前者是OpenBSD組織開發的一款免費的SSH軟體,後者是商業軟體,因此在linux、FreeBSD、OpenBSD 、NetBSD等免費類UNIX系統種,通常都使用OpenSSH作為SSH協議的實現軟體。

    因此,本文重點介紹一下OpenSSH的使用。需要注意的是OpenSSH 和 SSH Communications的登陸公鑰/私鑰的格式是不同的,如果想用SSH Communications產生的私鑰/公鑰對來登入到使用OpenSSH的linux系統需要對公鑰/私鑰進行格式轉換。

    OpenSSH 是一組用於安全地訪問遠端計算機的連線工具。 它可以作為 rlogin、 rsh rcp 以及 telnet 的直接替代品使用。 更進一步, 其他任何 TCP/IP 連線都可以通過 SSH 安全地進行隧道/轉發。 OpenSSH 對所有的傳輸進行加密, 從而有效地阻止了竊聽、 連線劫持, 以及其他網路級的攻擊。

    在出現SSH之前,系統管理員需要登入遠端伺服器執行系統管理任務時,都是用telnet 或者 rlogin 來實現的,telnet協議採用明文密碼傳送,在傳送過程中對資料也不加密,很容易被不懷好意的人在網路會話中竊取到傳輸的使用者名稱/密碼和資料。同樣,在SSH工具出現之前R系列命令也很流行(由於這些命令都以字母r開頭,故把這些命令合稱為R系列命令R是remote的意思),比如rexec是用來執行遠端伺服器上的命令的,和telnet的區別是telnet需要先登陸遠端伺服器再實行相關的命令,而R系列命令可以把登陸和執行命令並登出系統的操作整合在一起。這樣就不需要為在遠端伺服器上執行一個命令而特地登陸伺服器了。

    SSH是一種加密協議,不僅在登陸過程中對密碼進行加密傳送,而且對登陸後執行的命令的資料也進行加密,這樣即使別人在網路上監聽並截獲了你的資料包,他也看不到其中的內容。OpenSSH已經是目前大多數linux和BSD作業系統(甚至cygwin)的標準組件,因此關於如何安裝OpenSSH本文就不再敘述了,如果不出意外,你的系統上必定已經安裝好了OpenSSH。

SSH 伺服器端: 

OpenSSH 軟體包包含了以下程式:

sshd-- SSH服務端程式

sftp-server-- SFTP服務端程式(類似FTP,但提供資料加密的一種協議)

scp               -- 非互動式sftp-server的客戶端,用來向伺服器上傳/下載檔案,安全複製

sftp              -- 互動式sftp-server客戶端,用法和ftp命令一樣。

slogin-- ssh的別名

ssh               -- SSH協議的客戶端程式,用來登入遠端系統或遠端執行命令

ssh-add      --  SSH代理相關程式,用來向SSH代理新增dsa key

ssh-agent     -- ssh代理程式

ssh-keygen    -- ssh public key 生成器

SSH 客戶端工具:

    ssh 客戶端工具比較常用的有:

  • Windows(SecureCRT / Xshell / Putty) 

  • Linux (ssh)

    SSH最常用的使用方式是代替telnet進行遠端登陸。不同於telnet的密碼登陸,SSH還同時支援Publickey、Keybord Interactive、GSSAPI等多種登入方式,不像telnet那樣只有輸入系統密碼一種途徑。目前最常用的登陸方式還是傳統的Password方式 和 Publickey方式登陸。

SSH提供兩種方式的登入驗證:

1、密碼(口令)驗證:以伺服器中本地系統使用者的登入名稱,密碼進行驗證。

2、金鑰對驗證:要求提供相匹配的祕鑰資訊才能通過驗證。通常先在客戶機中建立一對金鑰檔案(公鑰和私鑰),然後將公鑰檔案放到伺服器中的指定位置。

注意:當密碼驗證和私鑰驗證都啟用時,伺服器將優先使用金鑰驗證。

二、基本使用

1、用於代替 telnet, 進行遠端登入。
# ssh [email protected]
2、如果bending使用者名稱與遠端主機使用者名稱一致,登入時可以省略使用者名稱。
# ssh host
3、ssh 協議預設埠 22,也就是預設情況是連線遠端主機的22號埠,使用 -p 引數可以指定埠號
# ssh -p 2222 [email protected]

4、ssh 遠端執行命令
# ssh [email protected] 'ls -l /etc'
輸入正確的密碼後,ssh會連結遠端伺服器的sshd伺服器程式,然後執行遠端伺服器上的 ls –l /etc 命令 ,並把輸入結果傳到本地伺服器。相當於你先登陸到遠端伺服器,然後再實行命令ls –l /,最後再登出伺服器。

三、中間人攻擊

    SSH之所以能夠保證安全,原因在於它採用了公鑰加密。

    整個過程是這樣的:

(1)遠端主機收到使用者的登入請求,把自己的公鑰發給使用者。

(2)使用者使用這個公鑰,將登入密碼加密後,傳送回來。

(3)遠端主機用自己的私鑰,解密登入密碼,如果密碼正確,就同意使用者登入。

    這個過程本身是安全的,但是實施的時候存在一個風險:如果有人截獲了登入請求,然後冒充遠端主機,將偽造的公鑰發給使用者,那麼使用者很難辨別真偽。因為不像https協議,SSH協議的公鑰是沒有證書中心(CA)公證的,也就是說,都是自己簽發的。

    可以設想,如果攻擊者插在使用者與遠端主機之間(比如在公共的wifi區域),用偽造的公鑰,獲取使用者的登入密碼。再用這個密碼登入遠端主機,那麼SSH的安全機制就蕩然無存了。這種風險就是著名的"中間人攻擊"(Man-in-the-middle attack)。

SSH協議是如何應對的呢?

如果你是第一次通過ssh登入遠端主機,會出現下面的提示:

1 2 3 4 # ssh [email protected] The authenticity of host 'host (12.18.429.21)' can't be established. RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d. Are you sure you want to continue connecting (yes/no)?

wKiom1b2kG3gEk01AACK7YPNUt8227.png

    這段話的意思是,無法確認host主機的真實性,只知道它的公鑰指紋,問你還想繼續連線嗎?

    所謂"公鑰指紋",是指公鑰長度較長(這裡採用RSA演算法,長達1024位),很難比對,所以對其進行MD5計算,將它變成一個128位的指紋。上例中是98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d,再進行比較,就容易多了。

很自然的一個問題就是,使用者怎麼知道遠端主機的公鑰指紋應該是多少?回答是:沒有好的辦法,遠端主機必須在自己的網站上貼出公鑰指紋,以便使用者自行核對。

    假定經過風險衡量以後,使用者決定接受這個遠端主機的公鑰。

1 Are you sure you want to continue connecting (yes/no)? yes

系統會出現一句提示,表示host主機已經得到認可。

1 Warning: Permanently added 'host,12.18.429.21' (RSA) to the list of known hosts.

    當遠端主機的公鑰被接受以後,它就會被儲存在使用者home目錄的  $HOME/.ssh/known_hosts 檔案之中。下次再連線這臺遠端主機,系統就會認出它的公鑰已經儲存在本地了,從而跳過警告部分,直接提示輸入密碼。

    出現“WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED 警告”無法建立ssh連線。如果遠端系統重灌過系統, ssh指紋已經改變,你需要把 .ssh 目錄下的 know_hosts 檔案中相應遠端主機IP一致的指紋刪除,再通過ssh登入一次回答 yes,重新認證一次方可登入。注意 .ssh 目錄是以 "." 開頭的隱藏目錄,需要 # ls -a 引數才能看到。如果使用的windows ssh客戶端工具,也有類似  Host Key Manager 管理的功能。

而且這個目錄的許可權必須是700,並且使用者的home目錄也不能給其他使用者寫許可權,否則ssh伺服器會拒絕登陸。如果發生不能登陸的問題,請察看伺服器上的日誌檔案/var/log/secure。通常能很快找到不能登陸的原因。

    每個SSH使用者都有自己的 known_hosts 檔案,此外系統也有一個這樣的檔案,通常是

相關推薦

SSH原理基本使用ssh 安全配置 以及ssh key 認證登入

一、什麼是 SSH ?      SSH全稱(Secure SHell)是一種網路協議,顧名思義就是非常安全的shell,主要用於計算機間加密傳輸。早期,網際網路通訊都是基於明文通訊,一旦被截獲,內容就暴露無遺。1995年,芬蘭學者Tatu Ylonen設計

SSH原理基本使用

1、啟思代做啟思畢業網站設計代做是專業java畢業程式設計代做,主要針對java,ssh,ssm,jsp,j2ee,android相關管理系統的畢業設計代寫。 客服:加扣扣(么零三貳三七么貳么) 2、代做特色a、根據需求提供定做設計的服務,不賣模版:我們是java畢設定做服務,安全按照顧客提出的開題要求,

linux安全配置-將ssh服務隱藏於Internet(端口碰撞)

交流 sbin 開啟 信息 done opts 必須 image for 一:設備信息 要保護的服務器:ubuntu14.04 192.168.1.38 ssh測試機:kali2.0 192.168.1.47 二:配置過程 1

SSH整合方式二將Hibernate配置檔案交給Spring,Hibernate模版常用方法

重建一個SSH專案 java專案可以直接複製,但是web專案除了改名字還要該配置,如下:   Hibernate配置檔案中有哪些內容: 資料庫連線的配置 Hibernate屬性的配置:方言,顯示sql,格式化sql。。。。 C3P0連線池 對映 將Hibernat

DNS原理正、反向解析配置

DNS BIND 解析 主從 DNS and BindSockets:C/S:Client:發起應用請求的程序Server:響應請求(提供服務)的程序LISTEN:SocketsDNS :Domain Name Server, 應用層協議C/S:53/tcp , 53/udp DNS

iptables的原理基本用法

iptables 原理 基本用法 iptables-----可以將規則組成一個列表,實現絕對詳細的訪問控制功能。一、iptables基礎Iptables中的規則表:規則表的先後順序:raw→mangle→nat→filte規則鏈的先後順序:入站順序:PREROUTING→INPUT出站順序:OUT

github windows配置以及ssh生成 Permission denied (publickey)

列表 dde win 依次 是否 密碼 cmd命令 eight 頭像 1:進入cmd命令下,或者可以使用GIt工具 (如果出現了 Permission denied 或者配置多個SSH Key跳第6步)   git工具 下載地址:https://git-scm.c

Etcd安全配置之Basic Auth認證

《中小團隊落地配置中心詳解》文章中我們介紹瞭如何基於Etcd+Confd構建配置中心,最後提到Etcd的安全問題時說了可以使用賬號密碼認證以達到安全訪問的目的,究竟該如何開啟認證以及怎麼設計許可權訪問呢?本文將為你詳細解讀 認證說明 Etcd v2以上的版本才支援許可權認證,且僅支援Basic Auth

實踐二caffe環境配置以及使用ssd-caffe訓練自己的資料集

1:環境配置 首先,我們把專案程式碼clone下來, 然後編譯: git clone https://github.com/weiliu89/caffe.git cd caffe git checkout ssd 檢視有沒有安裝opencv pkg-co

Github(windows)建立倉庫(後附上傳個人專案,Git常用命令查詢)配置本地ssh key

建立Github使用者並配ssh 最近需要將課設程式碼上傳到Github上,之前只是用來fork別人的程式碼。 這篇文章寫得是windows下的使用方法(可能隨著版本的更新,部分的操作位置不一樣,需要自己找找。但是主要的過程是一樣的)。 第一步:建立Github新賬戶

filezillaputty的ssh工具配置使用

最近需要從遠端登入使用伺服器進行操作,因此研究了下關於一些使用ssh協議的相關軟體,有比較廣泛使用的putty工具和sftp管理檔案的filezilla,都是相當方便簡單,這裡想大家介紹一下兩款工具的

安全牛學習筆記】SSH隧道SSH本地端口轉發

security+ 信息安全 SSH隧道 SSH支持雙向通信隧道 - 將其他TCP端口的通信通過SSH連接來轉發 - 用SSH作為傳輸層協議,對流量自動加解密

SSH原理與運用(一)遠程登錄

獲得 回車 you 密碼登錄 很難 windows 註釋 設備 範圍 SSH是每一臺Linux電腦的標準配置。 隨著Linux設備從電腦逐漸擴展到手機、外設和家用電器,SSH的使用範圍也越來越廣。不僅程序員離不開它,很多普通用戶也每天使用。 SSH具備多種功能,可以用於很多

第五篇Centos7上配置docker容器ssh登錄

方式 service col 客戶端連接 httpd 添加 遠程 初步 images 1.查看httpd容器是否運行2.啟動httpd容器3.默認情況下,我們只能在宿主機上通過如下方式連接容器說明:這是在宿主機連接容器直接有效的方法 我們能夠通過容器的IP地址連接容器呢?需

搭建ssm框架項目基本原理主要的配置文件小結

切面 localhost post 適配 res enter pop -h spl 1.springmvc是spring框架的一個模塊,springmvc和spring無需通過中間整合層進行整合。springmvc是一個基於mvc的web框架。mvc的思想

SSH密碼秘鑰認證原理

原理 png 進行 copy 消息 9.png 技術分享 客戶端 nbsp SSH登錄方式主要分為兩種: 1. 用戶名密碼驗證方式 說明:   (1) 當客戶端發起ssh請求,服務器會把自己的公鑰發送給用戶;   (2) 用戶會根據服務器發來的公鑰對密碼進行加密;  

ssh服務的安全配置

Linux SSH服務 安全配置 對於一臺服務器,最大的問題莫過於安全。沒有安全性的服務器即使再牛*,性能再好,作用再大,也是分分鐘被人搞定,而且還是揉虐性的。。。當然萬事沒有絕對的安全,我們只是將危險降低而已。本文只針對於ssh服務最基本 的安全設置,畢竟 俺也是一個地地道道的菜鳥!!!   配

ssh安全優化-更改SSH服務器端遠程登錄的配置

居住 token 限制 option logo config 更改 vim sed 1、備份原始文件[root@szxjdw01-a-pro-14 ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.ori [root@szxj

Flask中之數據庫框架模型類四再述SQLAlchemy配置基本操作之增刪改查

模糊 offset odi com app ack 字符 add () from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) #設置連接數據庫的URL

華為設備安全登錄SSH配置方法

oca telnet ace 22端口 認證方式 shell 權限 ans 設備安全 原理:由於Telnet缺少安全的認證方式,而且傳輸過程采用TCP進行明文傳輸,存在很大的安全隱患,單純的提供Telnet服務容易招致主機ip地址欺騙,路由欺騙等。1.1 Stelnet