❶ ssh的簡介與常用用法
ssh 為 secure shell 的英文縮寫,是一種加密的網路傳輸協議。常用於登錄遠程伺服器與在遠程伺服器上執行命令。
SSH 使用客戶端-伺服器模型,標准埠為 22。伺服器端需要開啟 SSH 守護進程接受遠端的連接,而用戶需要使用 SSH 客戶端與服務端連接。
最常見的開源實現是 OpenSSH
登錄:
在遠程機器上執行 command,把 stdout,stderr 送回來然後斷開連接:
常用參數:
scp 是一個命令行工具,是英文 secure 的縮寫,用於在伺服器和客戶端之間傳輸文件,操作類似cp。
使用注意點:遠程主機名後要加個冒號再跟路徑。如:
SSH 以非對稱加密實現身份驗證。身份驗證有多種途徑,可以使用密碼來認證,也可以通過實現配置好的密鑰文件來認證。
通過密鑰認證登錄的條件:
我們通常使用 ssh-keygen 這個工具來生成公鑰和私鑰,如下:
這會生成兩個文件 ~/.ssh/id_rsa 和 ~/.ssh/id_rsa.pub ,前者是私鑰,我們應該小心保護,後者是公鑰,應當將其放到服務端的 ~/.ssh/authorized_keys 中去,我們可以使用 ssh--id 這個工具來完成:
或者手動將其復制粘貼過去。
也可以使用如下命令:
跳板機,又常叫做「Bastion host」。
在企業中,業務伺服器通常有 ip 限制,不允許直接從辦公機登錄,而是需要先登錄一個跳板機,通過跳板機來登錄業務伺服器。
這樣做的目的是:隔離內部網路,只允許從跳板機訪問,那麼我們只需要特別關注跳板機的安全配置就可以了,便於更好的進行安全控制。
我們可以配置 ssh 客戶端,讓 ssh 替我們處理跳板機的登錄,避免多次輸入命令的負擔。
假設我們有跳板機 jumpserver 和 目標伺服器 targetserver。
方法一、使用命令行的 -J 參數
方法二、配置文件: ~/.ssh/config
然後就可以直接:
sshd 的配置文件: /etc/ssh/sshd_config 。
我們可以修改 sshd 的默認配置來增強系統的安全性,以下是一些需要注意的配置項:
❷ SSH隧道協議(AES密鑰對加密法則)
SSH是每一台linux電腦的標准配置
隨著Linux設備從電腦逐漸擴展到手機、外設和家用電器,SSH的適用范圍也越來越廣。不僅程序員離不開它,很多普通用戶也每天使用;SSH具備多種功能,可以用於很多場合。有些事情,沒有它就是辦不成
簡單說,SSH是一種網路協議,用於計算機之間的加密登錄。
如果一個用戶從本地計算機,使用SSH協議登錄另一台遠程計算機,我們就可以認為,這種登錄是安全的,即使被中途截獲,密碼也不會泄露。
最早的時候,互聯網通信都是明文通信,一旦被截獲,內容就暴露無疑。1995年,芬蘭學者Tatu Ylonen設計了SSH協議,將登錄信息全部加密,成為互聯網安全的一個基本解決方案,迅速在全世界獲得推廣,目前已經成為Linux系統的標准配置。雹和陵
需要指出的是,SSH只是一種協議,存在多種實現,既有商業實現,也有開源實現。
SSH主要用於遠程登錄。假定你要以用戶名user,登錄遠程主機host,只要一條簡單命令就可以了。
如果本地用戶名與遠程用戶名一致,登錄時可以省略用戶名。
SSH的默認埠是22,也就是說,你的登錄請求會送進遠程主機的22埠。使用p參數,可以修改這個埠。
上面這條命令表示,ssh直接連接遠程主機的2222埠。
SSH之所以能夠保證安全,原因在於它採用了公鑰加密。
整個過程是這樣的:(1)遠程主機收到用戶的登錄請求,把自己的公鑰發給用戶。(2)用戶使用這個公鑰,將登錄密碼加密後,發送回來。(3)遠程主機用自己的私鑰,解密登錄密碼,如果密碼正確,就同意用戶登錄。
這個過程本身是安全的,但是實施的時候存在一個風險:如果有人截獲了登錄請求,然後冒充遠程主機,將偽造的公鑰發給用戶,那麼用戶很難辨別真偽。因為不像https協議,SSH協議的公鑰是沒有證書中心棚褲(CA)公證的,也就是說,都是自己簽發的。
可以設想,如果攻擊者插在用戶與遠程主機之間(比如在公共的wifi區域),用偽造的公鑰,獲取用戶的登錄密碼。再用這個密碼登錄遠程主機,那麼SSH的安全機制就盪然無存了。這種風險就是著名的「中間人攻擊」(Man-in-the-middle attack)。
SSH協議是如何應對的呢?
如果你是第一次登錄對方主機,系統會出現下面的提示:
這段話的意思是,無法確認host主機的真實性,只知道它的公鑰指紋,問你還想繼續連接嗎?
所謂」公鑰指紋」,是指公鑰長度較長(這里採用RSA演算法,長達1024位),很難比對,所以對其進行MD5計算,將它變成一個128位的指紋。上例中是98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d,再進行比較,就容易多了。
很自然的一個問題就是,用戶怎麼知道遠程主機的公鑰指紋應該是多少?回答是沒有好辦法,遠程主機必須在自己的網站上貼出公鑰指紋,以便用戶自行核對。
假定經過風險衡量以後,用戶決定接受這個遠程主機的公鑰。
系統會出現一句提示,表示host主機已經得到認可。
然後,會要求輸入密碼。
如果密碼正確,就可以登錄了。
當遠程主機的公鑰被接受以後,它就會被保存在文件 $HOME/.ssh/known_hosts 之中。下次再連接這台主機,系統就會認出它的公鑰已經保存在本地了,從而跳過警告部分,直接提示輸入密碼。
每個SSH用戶都有自己的 known_hosts 文件,此外系統也有一個這樣的文件,通常是 /etc/ssh/ssh_known_hosts ,保存一些對所有用戶都可信賴的遠程主機的公鑰。
使用密碼登錄,每次都必須輸入密碼,非常麻煩。好在SSH還提供了公鑰登錄,可以省去輸入密碼的步驟。
所謂」公鑰登錄」,原理很簡單,就是用戶將自己的公鑰儲存在遠程主機上。登錄的時候,遠程主機會向用戶發送一段隨機字元串,用戶用自己的私鑰加密後,再發回來。遠程主機用事先儲存的公鑰進行解密,如果成功,就證明用戶是可信的,直接允許登錄shell,不再要求密碼。
這種方法要求用戶必須提供自己的公鑰。如果沒有現成的源戚,可以直接用 ssh-keygen 生成一個:
運行上面的命令以後,系統會出現一系列提示,可以一路回車。其中有一個問題是,要不要對私鑰設置口令(passphrase),如果擔心私鑰的安全,這里可以設置一個。
運行結束以後,在$HOME/.ssh/目錄下,會新生成兩個文件: id_rsa.pub 和 id_rsa 。前者是你的公鑰,後者是你的私鑰。
這時再輸入下面的命令,將公鑰傳送到遠程主機host上面:
好了,從此你再登錄,就不需要輸入密碼了。
如果還是不行,就打開遠程主機的 /etc/ssh/sshd_config 這個文件,檢查下面幾行前面」#」注釋是否取掉。
然後,重啟遠程主機的ssh服務。
遠程主機將用戶的公鑰,保存在登錄後的用戶主目錄的 $HOME/.ssh/authorized_keys 文件中。公鑰就是一段字元串,只要把它追加在 authorized_keys 文件的末尾就行了。
這里不使用上面的ssh--id命令,改用下面的命令,解釋公鑰的保存過程:
這條命令由多個語句組成,依次分解開來看:
(1) 」$ ssh user@host」 ,表示登錄遠程主機;
(2)單引號中的 mkdir .ssh && cat >> .ssh/authorized_keys ,表示登錄後在遠程shell上執行的命令:
(3) 」$ mkdir -p .ssh」 的作用是,如果用戶主目錄中的.ssh目錄不存在,就創建一個;
(4) 』cat >> .ssh/authorized_keys』 < ~/.ssh/id_rsa.pub 的作用是,將本地的公鑰文件 ~/.ssh/id_rsa.pub ,重定向追加到遠程文件 authorized_keys 的末尾。
寫入 authorized_keys 文件後,公鑰登錄的設置就完成了。
❸ ssh服務介紹
SSH是Secure Shell Protocol的簡寫。在進行數據傳輸之前,SSH先對聯機數據包通過加密技術進行加密處理,加密後在進行數據傳輸。確保了傳遞的數據安全。
SSH是專為遠程登陸會話和其他網路服務提供的安全性協議。利用SSH協議可以有效的防止遠程管理過程中的信息泄漏問題。
在默認狀態下,SSH服務主要提供兩個服務功能;一個是提供類似telnet遠程聯機伺服器的服務,即上面提到的SSH服務:另一個類似FTP服務的sftp-server,藉助SSH協議來傳輸數據的,提供更安全的SFTP服務 提醒SSH客戶端(ssh命令)還包含一個很有用的遠程安全拷貝命令scp,也是通過ssh協議工作的
小結:
1)SSH是安全的加密協議,用於遠程連接Linux伺服器。
2)SSH默認的埠是22,安全協議版本是SSH2,除了2還有ssh1有漏洞
3)SSH伺服器端主要包含兩個伺服器功能SSH遠程連接,SFTP服務。
4)Linux SSH客戶端包含ssh遠程連接命令,以及遠程拷貝scp命令等。
修改SSH服務的運行參數,是通過修改配置文件/etc /ssh/sshd_config實現的。
Port 52114 (ssh默認連接埠是22 修改他)
PermitRootLogin no(禁止遠程root登陸)
PermitEmptyPasswords no(禁止空密碼的登陸)
UseDNS no(不適用DNS)
ListenAddress 172.16.1.61:22 (只監聽內網IP 可以加埠號)
在遠程管理linux系統基本上都要使用到ssh,原因很簡單:telnet、FTP等傳輸方式是以明文傳送用戶認證信息,本質上是不安全的,存在被網路竊聽的危險。SSH(Secure Shell)目前較可靠,是專為遠程登錄會話和其他網路服務提供安全性的協議。利用SSH協議可以有效防止遠程管理過程中的信息泄露問題,透過SSH可以對所有傳輸的數據進行加密,也能夠防止DNS欺騙和IP欺騙。
ssh_config和sshd_config都是ssh伺服器的配置文件,二者區別在於,前者是針對客戶端的配置文件,後者則是針對服務端的配置文件。兩個配置文件都允許你通過設置不同的選項來改變客戶端程序的運行方式。下面列出來的是兩個配置文件中最重要的一些關鍵詞,每一行為「關鍵詞&值」的形式,其中「關鍵詞」是忽略大小寫的。
1、編輯 /etc/ssh/ssh_config 文件
Site-wide defaults for various options
Host *
ForwardAgent no
ForwardX11 no
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication yes
PasswordAuthentication yes
FallBackToRsh no
UseRsh no
BatchMode no
CheckHostIP yes
StrictHostKeyChecking no
IdentityFile ~/.ssh/identity
Port 22
Cipher blowfish
EscapeChar ~
下面對上述選項參數逐進行解釋:
Site-wide defaults for various options
帶「#」表示該句為注釋不起作,該句不屬於配置文件原文,意在說明下面選項均為系統初始默認的選項。說明一下,實際配置文件中也有很多選項前面加有「#」注釋,雖然表示不起作用,其實是說明此為系統默認的初始化設置。
Host *
"Host"只對匹配後面字串的計算機有效,「 」表示所有的計算機。從該項格式前置一些可以看出,這是一個類似於全局的選項,表示下面縮進的選項都適用於該設置,可以指定某計算機替換 號使下面選項只針對該算機器生效。
ForwardAgent no
"ForwardAgent"設置連接是否經過驗證代理(如果存在)轉發給遠程計算機。
ForwardX11 no
"ForwardX11"設置X11連接是否被自動重定向到安全的通道和顯示集(DISPLAY set)。
RhostsAuthentication no
"RhostsAuthentication"設置是否使用基於rhosts的安全驗證。
RhostsRSAAuthentication no
"RhostsRSAAuthentication"設置是否使用用RSA演算法的基於rhosts的安全驗證。
RSAAuthentication yes
"RSAAuthentication"設置是否使用RSA演算法進行安全驗證。
PasswordAuthentication yes
"PasswordAuthentication"設置是否使用口令驗證。
FallBackToRsh no
"FallBackToRsh"設置如果用ssh連接出現錯誤是否自動使用rsh,由於rsh並不安全,所以此選項應當設置為"no"。
UseRsh no
"UseRsh"設置是否在這台計算機上使用"rlogin/rsh",原因同上,設為"no"。
BatchMode no
"BatchMode":批處理模式,一般設為"no";如果設為"yes",互動式輸入口令的提示將被禁止,這個選項對腳本文件和批處理任務十分有用。
CheckHostIP yes
"CheckHostIP"設置ssh是否查看連接到伺服器的主機的IP地址以防止DNS欺騙。建議設置為"yes"。
StrictHostKeyChecking no
"StrictHostKeyChecking"如果設為"yes",ssh將不會自動把計算機的密匙加入"$HOME/.ssh/known_hosts"文件,且一旦計算機的密匙發生了變化,就拒絕連接。
IdentityFile ~/.ssh/identity
"IdentityFile"設置讀取用戶的RSA安全驗證標識。
Port 22
"Port"設置連接到遠程主機的埠,ssh默認埠為22。
Cipher blowfish
「Cipher」設置加密用的密鑰,blowfish可以自己隨意設置。
EscapeChar ~
「EscapeChar」設置escape字元。
2、編輯 /etc/ssh/sshd_config 文件:
This is ssh server systemwide configuration file.
Port 22
ListenAddress 192.168.1.1
HostKey /etc/ssh/ssh_host_key
ServerKeyBits 1024
LoginGraceTime 600
KeyRegenerationInterval 3600
PermitRootLogin no
IgnoreRhosts yes
IgnoreUserKnownHosts yes
StrictModes yes
X11Forwarding no
PrintMotd yes
SyslogFacility AUTH
LogLevel INFO
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords no
AllowUsers admin
下面逐行說明上面的選項設置:
Port 22
"Port"設置sshd監聽的埠號。
ListenAddress 192.168.1.1
"ListenAddress」設置sshd伺服器綁定的IP地址。
HostKey /etc/ssh/ssh_host_key
"HostKey」設置包含計算機私人密匙的文件。
ServerKeyBits 1024
"ServerKeyBits」定義伺服器密匙的位數。
LoginGraceTime 600
"LoginGraceTime」設置如果用戶不能成功登錄,在切斷連接之前伺服器需要等待的時間(以秒為單位)。
KeyRegenerationInterval 3600
"KeyRegenerationInterval」設置在多少秒之後自動重新生成伺服器的密匙(如果使用密匙)。重新生成密匙是為了防止用盜用的密匙解密被截獲的信息。
PermitRootLogin no
"PermitRootLogin」設置是否允許root通過ssh登錄。這個選項從安全形度來講應設成"no"。
IgnoreRhosts yes
"IgnoreRhosts」設置驗證的時候是否使用「rhosts」和「shosts」文件。
IgnoreUserKnownHosts yes
"IgnoreUserKnownHosts」設置ssh daemon是否在進行RhostsRSAAuthentication安全驗證的時候忽略用戶的"$HOME/.ssh/known_hosts」
StrictModes yes
"StrictModes」設置ssh在接收登錄請求之前是否檢查用戶家目錄和rhosts文件的許可權和所有權。這通常是必要的,因為新手經常會把自己的目錄和文件設成任何人都有寫許可權。
X11Forwarding no
"X11Forwarding」設置是否允許X11轉發。
PrintMotd yes
"PrintMotd」設置sshd是否在用戶登錄的時候顯示「/etc/motd」中的信息。
SyslogFacility AUTH
"SyslogFacility」設置在記錄來自sshd的消息的時候,是否給出「facility code」。
LogLevel INFO
"LogLevel」設置記錄sshd日誌消息的層次。INFO是一個好的選擇。查看sshd的man幫助頁,已獲取更多的信息。
RhostsAuthentication no
"RhostsAuthentication」設置只用rhosts或「/etc/hosts.equiv」進行安全驗證是否已經足夠了。
RhostsRSAAuthentication no
"RhostsRSA」設置是否允許用rhosts或「/etc/hosts.equiv」加上RSA進行安全驗證。
RSAAuthentication yes
"RSAAuthentication」設置是否允許只有RSA安全驗證。
PasswordAuthentication yes
"PasswordAuthentication」設置是否允許口令驗證。
PermitEmptyPasswords no
"PermitEmptyPasswords」設置是否允許用口令為空的帳號登錄。
AllowUsers admin
"AllowUsers」的後面可以跟任意的數量的用戶名的匹配串,這些字元串用空格隔開。主機名可以是域名或IP地址。
通常情況下我們在連接 OpenSSH伺服器的時候假如 UseDNS選項是打開的話,伺服器會先根據客戶端的 IP地址進行 DNS PTR反向查詢出客戶端的主機名,然後根據查詢出的客戶端主機名進行DNS正向A記錄查詢,並驗證是否與原始 IP地址一致,通過此種措施來防止客戶端欺騙。平時我們都是動態 IP不會有PTR記錄,所以打開此選項也沒有太多作用。我們可以通過關閉此功能來提高連接 OpenSSH 伺服器的速度。
1)執行命令生成私鑰和公鑰 ssh-keygen -t dsa 如圖:
3)我們切換過去就不需要密碼了 如圖
❹ 怎麼才能加密客戶端和GBase 8c伺服器之間的網路連接
你可以試試使用ssh來加密客戶端和GBase8c伺服器之間的連接,命令為ssh-L63333:localhost:[email protected]。
❺ SSH的工作原理
傳統的網路服務程序,比如 FTP , POP , Telnet ,本質上都是不安全的,因為它們在網路上用明文傳送數據、用戶賬號和用戶口令,很容易受到 中間人 攻擊方式的攻擊,攻擊者會冒充真正的伺服器接收用戶傳給伺服器的數據,然後再冒充用戶把數據傳給真正的伺服器。
為了滿足安全性的需求, IETF 的網路工作小組制定了 Secure Shell (縮寫為 SSH ),這是一項創建在 應用層 和 傳輸層 基礎上的安全協議,為計算機上的 Shell 提供安全的傳輸和使用環境。
SSH 是目前較可靠,專為遠程登錄會話和其他網路服務提供安全性的協議。利用 SSH 協議可以有效防止遠程管理過程中的信息泄漏問題。通過 SSH 可以對所有傳輸的數據進行加密,也能夠防止DNS欺騙和IP欺騙。
本文將會重點討論 SSH 中用到的加密演算法和建立安全連接的過程。
為了保證信息傳輸的安全性, SSH 使用了對稱加密、非對稱加密和散列等技術。
對稱密鑰加密又稱為對稱加密、私鑰加密、共享密鑰加密,是密碼學中一類加密演算法。這類演算法在加密和解密時使用相同的密鑰,或是使用兩個可以簡單地相互推算的密鑰。
SSH 使用對稱密鑰加密整個連接過程中傳輸的信息。值得注意的是,用戶自己創建的public/private密鑰對僅僅用於驗證,不會用在加密連接上。對稱加密允許對密碼進行身份驗證,以防止第三方窺探。
共享密鑰通過密鑰交換演算法生成,它可以讓雙方在完全沒有對方任何預先信息的條件下通過不安全信道創建起一個密鑰。客戶端和服務端都參與了這個過程,過程的細節將在後面闡述。
生成的密鑰將用來加密這次會話過程中客戶端和服務端傳輸的數據。這個過程會在驗證客戶身份之前完成。
SSH 支持多種對稱密鑰演算法,包括AES,Blowfish,3DES,CAST128和Arcfour。客戶端和服務端可以配置採用演算法的列表。客戶端列表中第一個能被服務端支持的演算法將被採用。
比如在Ubuntu 14.04上,客戶端和服務端默認的配置如下: aes128-ctr , aes192-ctr , aes256-ctr , arcfour256 , arcfour128 , [email protected] , [email protected] , [email protected] , aes128-cbc , blowfish-cbc , cast128-cbc , aes192-cbc , aes256-cbc , arcfour 。
也就是說,如果兩台Ubuntu 14.04採用默認配置,它們總是會採用 aes128-ctr 演算法來加密連接。
在非對稱加密方法中,需要一對密鑰,一個是私鑰,一個是公鑰。這兩個密鑰數學相關。用公鑰加密後所得的信息,只能用私鑰才能解密。如果知道了其中一個,並不能計算另外一個。因此,如果公開了一對密鑰中的一個,並不會危害到另外一個的秘密性質。
SSH 在一些地方使用了非對稱加密。
在密鑰交換過程中使用到了非對稱加密。在這個階段,客戶端和服務端生成臨時密鑰對,並且交換公鑰來生成共享密鑰。
在身份驗證的過程中也使用了非對稱加密。 SSH 密鑰對用來向服務端驗證客戶端身份。客戶端創建一對密鑰,然後將公鑰上傳到遠程伺服器上,寫入文件 ~/.ssh/authorized_keys 。
在創建共享密鑰後,客戶端必須向服務端證明身份。服務端會使用文件中的公鑰加密一段信息,並將加密後的信息發送給客戶端。如果客戶端可以能夠破解這段信息,那麼就能夠證明自己擁有相關的私鑰。之後服務端會為客戶端設置shell環境。
散列是電腦科學中一種對資料的處理方法,它通過某種特定的演算法將要檢索的項與涌來檢索的索引關聯起來,生成一種便於搜索的數據結構(散列表)。它也常用做一種資訊安全的方法,由一串資料中經過散列演算法計算出來的資料指紋,來識別檔案和資料是否有被篡改。
SSH 主要使用了散列消息認證碼(Keyed-hash message authentication code,縮寫為HMAC),來確認消息沒有被篡改。
上面提到的對稱加密協商過程中,會使用消息認證碼(MAC)演算法。這個演算法會從客戶端支持的演算法中選出。
在密鑰協商完成後,所有的消息都必須攜帶MAC,用於通信雙方驗證消息的一致性。MAC值由共享密鑰,消息的分組序列和實際消息內容計算得到。
在對稱加密區域之外,MAC本身作為分組的最後部分被發送。研究者通常建議先機密數據,然後計算MAC
SSH 協議採用客戶端-服務端模型對兩方進行身份驗證,並對它們之間的數據進行加密。
服務端在指定埠監聽連接請求。它負責協商安全連接,認證連接方,並為客戶端生成正確的shell環境。
客戶端負責協商安全連接,驗證伺服器的身份是否與以前記錄的信息相匹配,並提供憑證進行身份驗證。
SSH會話分為兩個階段。第一個是同意和建立加密來保護未來的溝通。第二個階段是對用戶進行身份驗證,並發現是否應該授予對伺服器的訪問許可權。
當客戶端發起請求後,服務端返回支持的協議版本。如果客戶端可以匹配其中一個協議版本,則連接繼續。服務端會提供它的公共主機密鑰,客戶端可以用這個密鑰來驗證服務端是否合法。
此時,通信雙方採用迪菲-赫爾曼演算法來協商會話密鑰。
該演算法的大致過程如下:
用於其餘連接的共享密鑰加密被稱為二進制數據包協議。上述過程允許雙方平等地參與生成共享密鑰。
生成的密鑰是對稱密鑰,這意味著用於加密消息的密鑰也可以用於解密。其目的是將後面的通信包裝在不能被外部人員解密的加密隧道中。
在生成會話密鑰後,就開始進行用戶身份驗證。
根據伺服器接受的方式,有幾種不同的方法可用於身份驗證。
最簡單的方法是密碼驗證,其中伺服器要求客戶端輸入嘗試登陸賬號的密碼。密碼是通過協商加密發送的。
雖然密碼被加密,但由於密碼的復雜性受到限制,因此通常不建議使用此方法。與其他身份驗證的方法相比,自動腳本相對容易攻破正常長度的密碼。
最為推薦的選擇是使用SSH密鑰對。SSH密鑰對是非對稱密鑰。
公鑰用於加密只能用私鑰解密的數據。公鑰可以自由共享,因為沒有從公鑰中導出私鑰的方法。
驗證流程如下:
可以看到,密鑰的不對稱性允許服務端使用公鑰加密消息給客戶端。然後,客戶端可以通過正確解密消息來證明它擁有私鑰。
筆者本科專業是信息安全,不過畢業後並沒有從事安全行業,工作4年課堂上學習的知識基本忘的差不多了。
而SSH算是工作中最常用到的東西之一,其工作原理涉及不少密碼學的東西。
寫這篇博文,一是希望能幫助讀者了解SSH,二也是希望自己能撿起一些專業知識。在互聯網/軟體相關行業里,不論是否從事安全工作,了解這些東西都是很有必要的。
❻ ssh原理及應用
簡單說,SSH是一種網路協議,用於計算機之間的遠程加密登錄。
SSH 為 Secure Shell的縮寫,由 IETF 的網路小組(Network Working Group)所制定,SSH 為建立在應用層基礎上的安全協議。SSH 是目前較可靠,專為遠程登錄會話和其他網路服務提供安全性的協議。利用 SSH 協議可以有效防止遠程管理過程中的信息泄露問題。SSH最初是UNIX系統上的一個程序,後來又迅速擴展到其他操作平台。SSH安裝容易、使用簡單,而且比較常見,一般的Unix系統、Linux系統、FreeBSD系統都附帶有支持SSH的應用程序包。Windows如果需要使用SSH,可以安裝PuTTY或者Cygwin。
SSH 服務基於非對稱加密(public-key cryptography,也稱公開密鑰加密)技術實現數據加密傳輸。該技術會生成一對數學相關的密鑰, 其中一個用於對數據進行加密,而且只能用於加密,而另一個只能用於解密 。使用加密密鑰加密後的數據,只能用對應的解密密鑰才能解密。而且,只知道其中一個密鑰,無法計算出另一個。因此,如果公開了一對密鑰中的一個,並不會危害到另一個的秘密性質。通常把公開的密鑰稱為公鑰(public key),而不公開的密鑰稱為私鑰(private key)。
一般來說,非對稱加密的應用場景有兩個:
與對稱密鑰加密相比,非對稱加密的優點在於不存在共享的通用密鑰。由於解密用的私鑰無需發送給任何用戶,所以可以避免密鑰被劫持或篡改。而加密用的公鑰即便被劫持或篡改,如果沒有與其匹配的私鑰,也無法解密數據。所以,截獲的公鑰是沒有任何用處的。
當前,SSH主要採用 RSA 演算法(協議 V2 默認演算法)和 DSA 演算法(協議 V1 僅支持該演算法)來實現非對稱加密技術。
SSH連接時,整個交互過程如上圖。,主要可以分為三個階段
服務端在每次啟動 SSH 服務時,都會自動檢查 /etc/ssh/ 目錄下相關密鑰文件的有效性。如果相關文件檢查發現異常,則會導致服務啟動失敗,並拋出相應錯誤信息。 如果文件相關不存在,則會自動重新創建。
默認創建的相關文件及用途說明如下:
當伺服器SSH服務啟動,客戶端也安裝了SSH後,就可以進行連接了。
後續登錄校驗及正常的數據傳輸,都會通過雙向加密方式進行。相關交互說明如下:
從這個連接過程中,可以看出,主要使用到兩個文件夾下的內容:
在連接中的兩個過程:
之所以有多組密鑰,是因為使用了不同的加密演算法。
客戶端接收到之後,會存儲在 ~/.ssh/known_hosts 文件里,查看這個文件,可以看到有一行與伺服器 ssh_host_ecdsa_key.pub 內容一致。
所以, ~/.ssh/authorized_keys 里表示本機可以被哪些機器訪問
~/.ssh/known_hosts 里表示本機訪問過哪些機器
SSH配置文件有兩個,一個是 ssh_config ,一個是 sshd_config 。前者是客戶端配置,後者是伺服器配置。也就是說,如果本機是作為客戶端,那麼就修改第一個配置,如果本機是作為伺服器,那麼就修改第二個配置,
一般來說,和密鑰登錄的配置有關的有以下幾個,如果密鑰配置好後無法登錄,嘗試配置以下三項。
其他
傳統的網路服務程序,如FTP、Pop和Telnet在傳輸機制和實現原理上是沒有考慮安全機制的,其本質上都是不安全的。因為它們在網路上用明文傳送數據、用戶帳號和用戶口令,別有用心的人通過竊聽等網路攻擊手段非常容易地就可以截獲這些數據、用戶帳號和用戶口令。而且,這些網路服務程序的簡單安全驗證方式也有其弱點,那就是很容易受到"中間人"(man-in-the-middle)這種攻擊方式的攻擊。
所謂"中間人"的攻擊方式,就是"中間人"冒充真正的伺服器接收你的傳給伺服器的數據,然後再冒充你把數據傳給真正的伺服器。伺服器和你之間的數據傳送被"中間人"一轉手做了手腳之後,就會出現很嚴重的問題。中間人能夠攻擊,主要原因在於他能認識截取的信息,也能發出讓接受者認識的信息。
使用SSH,你可以把所有傳輸的數據進行加密,這樣"中間人"這種攻擊方式就不可能實現了,而且也能夠防止DNS欺騙和IP欺騙。使用SSH,還有一個額外的好處就是傳輸的數據是經過壓縮的,所以可以加快傳輸的速度。SSH有很多功能,它既可以代替Telnet,又可以為FTP、Pop、甚至為PPP提供一個安全的"通道"。
最初的SSH是由芬蘭的一家公司開發的。但是因為受版權和加密演算法的限制,現在很多人都轉而使用OpenSSH。OpenSSH是SSH的替代軟體包,而且是免費的,可以預計將來會有越來越多的人使用它而不是SSH。
❼ 簡述什麼是ssh以及ssh協議解決的問題
很多網站都是概念,我直接復制過來給你看,
SSH是一種加密的網路傳輸協議。 可在不安全的網路中為網路服務提供安全的傳輸環境。SSH通過在網路中創建安全隧道來實現SSH客戶端與伺服器之間的連接。SSH最常見的用途是遠程登錄系統,人們通常利用SSH來傳輸命令行界面和遠程執行命令。你說協議解決的問題?你這個是問通過SSH連接,然後去伺服器解決問題嗎?這個可以在《Linux就該這么學》第9章節 使用ssh服務管理遠程主機。你可以看看如何使用SSH連接遠端電腦或者伺服器。
❽ ssh跳板機與遠程連接
今日內容
1.什麼是SSH
SSH是一個安全協議,在進行數據傳輸時,會對數據包進行加密處理,加密後在進行數據傳輸。確保了數據傳輸安全
2.SSH的主要功能是什麼
1.提供遠程連接伺服器的服務
2.對遠程連接傳輸數據進行加密
3.SSH與Telnet之間有什麼關系
4.抓包分析ssh與telnet的區別
telnet使用在交換機 路由器 防火牆 等這類設備上
ssh 使用在伺服器鄰域
5.SSH相關客戶端指令ssh scp sftp
客戶端可以使用的命令:
ssh:用來連接遠程Linux伺服器(xshell底層,調用的就是ssh命令)
scp:遠程拷貝,全量拷貝(每次拷貝都是全量)
sftp:遠程傳輸
6.SSH遠程登錄方式,用戶密碼 密鑰方式
用戶密碼:簡單容易被破解、復雜記不住
基於密鑰的方式來實現:
生產一對擁有數學關系的密鑰對(公鑰、私鑰)
公鑰加密,私鑰解密。
公鑰可以對外提供,對外開放。
私鑰只有自己持有,不對外開放
7.密鑰方式的實現案例
8.SSH場景實踐,藉助SSH免秘實現跳板機功能?
9.SSH遠程連接功能安全優化?
❾ ssh簡介與使用
使用SSH的優點:
1)利用 SSH 協議可以有效防止遠程管理過程中絕叢的信息泄露問題,也能夠防止DNS欺騙和IP欺騙。
2)使用SSH傳輸的數據是經過壓縮的,所以可以加快傳輸的速度 。
但並不是說SSH就是絕對安全的,因為它本身提供兩種級別的驗證方法:
第一種級別(基於口令的安全驗證):只要你知道自己帳號和口令,就可以登錄到遠程主機。所有傳輸的數據都會被加密,但是不能保證你正在連接的伺服器就是你想連接的伺服器。可能會有別的伺服器在冒充真正的伺服器,也就是受到「中間人攻擊」這種方式的攻擊。
第二種級別(基於密鑰的安全驗證):你必須為自己創建一對密鑰,並把公鑰放在需要訪問的伺服器上。如果你要連接到SSH伺服器上,客戶端軟體就會向伺服器發出請求,請求用你的密鑰進行安全驗證。伺服器收到請求之後,先在該伺服器上你的主目錄下尋找你的公鑰,然後把它和你發送過來的公鑰進行比較。如果兩個密鑰一致,伺服器就用公鑰加密「質詢」(challenge)並把它發送給客戶端軟體。客戶端軟體收到「質詢」之後就可以用你的私鑰在本地解密再把它發送給伺服器完成登錄。與第一種級別相比,第二種級別不僅加密所有傳輸的數據,也不需要在網路上傳送口令,因此安全性更肢皮高,可以有效防止中間人攻擊。
1.在客戶端(本地)生成密鑰對
密鑰鎖碼在使用私鑰時必須輸入,這樣就可以保護私鑰不被盜用。當然,也可以留空,實現無密碼登錄,這里密鑰鎖碼設置為空。完成上述步驟後,在 root 用戶的家並飢櫻目錄中生成了一個 .ssh 的隱藏目錄,內含兩個密鑰文件,其中id_rsa 為私鑰,id_rsa.pub 為公鑰。
❿ 請教如何用ssh連接遠程伺服器
目前,遠程連接伺服器的類型有以下幾種:
① 文字介面的明文傳輸:Telnet、RSH為主,很少用到。
② 文字介面的加密傳輸:以SSH為主,已經取代了上面的明文傳輸方式。
③ 圖形介面:XDMCP、VNC、XRDP等較為常見。
這篇文章只為實戰,不為普及概念性知識。所以我只講解在工作中最常用到的技術SSH。關於SFTP技術和VNC技術,請查閱我的其他博客。
好,先來看一下SSH的相關技術:
SSH,英文全程是Secure Shell Protocol(安全的殼程序協議)。SSH是現在公司基本上都在使用的一種文字介面的加密傳輸技術,採用的是非對稱秘鑰系統。
對於SSH的原理,你們可以參考我的另外一篇博客,我把鏈接貼在這里:
SSH原理
⑴來吧,我們先來查看一下sshd這個服務(這就是SSH的遠程連接必須開啟的服務,屬於系統自帶),注意,一般這個sshd服務是默認自動開啟的。
注意:切記authorized_keys這個文件的許可權必須是644