SSH 為 Secure Shell 的縮寫,由 IETF 的網路小組(Network Working Group)所制定;
SSH 為建立在應用層基礎上的安全協議。SSH是目前較可靠,專為遠端登入會話和其他網路服務提供安全性的協議。
利用 SSH 協議可以有效防止遠端管理過程中的資訊洩露問題。

   傳統的網路服務程式,如:ftp、pop和telnet在本質上都是不安全的,因為它們在網路上用明文傳送口令和資料,
別有用心的人非常容易就可以截獲這些口令和資料。而且,這些服務程式的安全驗證方式也是有其弱點的, 就是很容易受到“中間人”(man-in-the-middle)這種方式的攻擊。
所謂“中間人”的攻擊方式, 就是“中間人”冒充真正的伺服器接收你傳給伺服器的資料,然後再冒充你把資料傳給真正的伺服器。伺服器和你之間的資料傳送被“中間人”一轉手做了手腳之後,
就會出現很嚴重的問題。通過使用SSH,你可以把所有傳輸的資料進行加密,這樣"中間人"這種攻擊方式就不可能實現了,而且也能夠防止DNS欺騙和IP欺騙。
使用SSH,還有一個額外的好處就是傳輸的資料是經過壓縮的,所以可以加快傳輸的速度。SSH有很多功能,它既可以代替Telnet,又可以為FTP、PoP、甚至為PPP提供一個安全的"通道"

OpenSSH 是 SSH (Secure SHell) 協議的免費開源實現。OpenSSH提供了服務端後臺程式和客戶端工具,用來加密遠端控制和檔案傳輸過程中的資料,並由此來代替原來的類似服務。

ssh連線伺服器慢的解決方法

編輯以下檔案
ssh服務端
配置檔案/etc/ssh/sshd_config
把以下2項修改為,並重啟ssh服務
UseDNS no
GSSAPIAuthentication no

ssh客戶端

配置檔案:/etc/ssh/ssh_config

語法:

ssh [user@]host [命令]  遠端執行命令後返回資訊並退出
    -p port:遠端伺服器監聽的埠
    -b:指定連線的源IP
    -v:除錯模式
    -C:壓縮方式
    -X: 支援x11(圖形)轉發
    -Y:支援信任x11轉發
    ForwardX11Trusted yes
    -t: 強制偽tty分配
ssh -t 跳板機IP ssh 最終訪問IP
#ssh -t 192.168.4.101 ssh 192.168.4.113

ssh服務登入驗證方式

基於使用者和口令登入驗證

image

基於金鑰的登入方式

1 首先在客戶端生成一對金鑰(ssh-keygen)
2 並將客戶端的公鑰ssh-copy-id 拷貝到服務端
3 當客戶端再次傳送一個連線請求,包括ip、使用者名稱
4 服務端得到客戶端的請求後,會到authorized_keys中查詢,如果有響應的IP和使用者,就會隨機生成一個字串,例如:acdf
5 服務端將使用客戶端拷貝過來的公鑰進行加密,然後傳送給客戶端
6 得到服務端發來的訊息後,客戶端會使用私鑰進行解密,然後將解密後的字串傳送給服務端
7 服務端接受到客戶端發來的字串後,跟之前的字串進行對比,如果一致,就允許免密碼登入

基於金鑰的認證實現步驟

命令語法

生成金鑰對
ssh-keygen -t rsa [-P ``] [-f "~/.ssh/id_rsa"]
ssh-keygen -t 加密演算法 -P `加密口令` -f "指定生成金鑰位置"   這個是大寫的P

公鑰檔案傳輸至遠端伺服器
ssh-copy-id [-i [identity_file]] [user@]host
ssh-copy-id -i 指定金鑰 遠端使用者@遠端主機

根據私鑰生成公鑰
#ssh-keygen -f id_rsa -y
-y選項表示根據私鑰生成對應的公鑰,生成的公鑰會列印在螢幕中,可以使用重定向生成公鑰檔案

修改現有私鑰的密碼
小寫的p是修改密碼
#ssh-keygen -f id_rsa -p
步驟:

1.在客戶端生成金鑰對
#ssh-keygen
#cat id_rsa
id_rsa      id_rsa.pub 

2.把公鑰檔案傳輸至遠端伺服器對應使用者的家目錄
#ssh-copy-id -i id_rsa.pub root@192.168.4.100
如果在COPY的時候不小心把公鑰寫成了私鑰,放心,實際執行時只會複製公鑰。

會在使用者的家目錄的.ssh/目錄生成authorized_keys檔案

3. 測試
#ssh root@192.168.4.100

4.實現了免密登入了
注意:如果不想再基於key認證了,可以把~/.ssh/authorized_keys檔案刪除

基於key的免密碼登入安全防範

私鑰很重要,等於身份的確認,一但私鑰丟失,風險是極高的。可是,好不容易剛整完了免密碼登入,如果對私鑰進行加密碼,每次使用都需要輸入密碼,豈不是給便利性帶來了麻煩?

ssh-agent

它可以幫助我們管理私鑰:

1.在使用不同的金鑰連線到不同的主機時,ssh代理可以幫助我們選擇對應的金鑰進行認證,不用手動指定金鑰即可進行連線。

2.當私鑰設定了密碼,ssh代理可以幫助我們免去重複的輸入密碼的操作。

基於Linux的步驟如下:

1.先完成以上的基於key驗證的步驟
2.啟動ssh-agent
    # eval `ssh-agent`
3.將私鑰新增到ssh代理
    # ssh-add 私鑰名
4.測試

基於Windows的 xshell 步驟如下:

image
image
image
image
image
image
image

以下為ssh-agent命令的一些常用選項。

啟動與關閉ssh-agent

方法一:
ssh-agent bash
在子shell中開啟ssh-agent,退出子shell自動結束代理

方法二:
eval `ssh-agent`
在當前shell中開啟ssh-agent,退出當前shell時最好使用ssh-agent -k關閉對應代理

將私鑰新增到ssh代理

ssh-add 私鑰名

#ssh-add id_rsa
Enter passphrase for id_rsa: 金鑰口令
Identity added: id_rsa (id_rsa)

檢視代理中的私鑰

ssh-add -l

檢視代理中的私鑰對應的公鑰

ssh-add -L

移除指定的私鑰

ssh-add -d 私鑰名

#ssh-add -d id_rsa
Identity removed: id_rsa (root@7-ansible-0)

移除代理中的所有私鑰

ssh-add -D

#ssh-add -D
All identities removed.