ssh:secure shell,protocol,22、tcp安全的遠程登錄
具體的軟件實現:
openssh:ssh協議的開源實現,centos默認安裝
dropbear:另一個開源實現
ssh協議版本
v1:基于crc-32做MAC,不安全;man-in-middle 已淘汰
v2:雙方主機協議選擇安全的MAC方式
基于DH算法做密鑰交換,基于RSA或DSA實現身份認證
兩種方式的用戶登錄認證
基于password
基于key
openssh軟件組成
相關包:openssh,openssh-clients,openssh-server
工具:
基于C/S結構
client:ssh,scp,sftp,slogin
windows客戶端:
xshell,putty,securecrt,sshsecureshellclient
server:sshd
ssh客戶端:
ssh,配置文件: /etc/ssh/ssh_config
命令格式 : ssh [user@]host [命令]
ssh [-l user] host [命令]
選項: -p port 遠程服務監聽的端口
-b 指定鏈接的源ip
-v 調試模式,顯示鏈接的詳細過程
-c:壓縮方式
-X 支持x11轉發
-y 支持信任x11轉發
-f 強制偽tty分配
允許實現對遠程系統經驗證的加密安全訪問
當用戶遠程鏈接ssh服務器時,會復制ssh服務器/etc/ssh/ssh_host*key.pub(centos7默認是ssh_host_ecdsa_key.pub)文件中的公鑰到客戶機的~./ssh/know_hosts中。下次鏈接時,會自動匹配到相應的私鑰,不能匹配,將拒絕鏈接。
ssh服務登錄驗證方式:
用戶/口令
基于密鑰
基于用戶口令登錄驗證
1.
1. 客戶端發起請求,服務器會把自己的公鑰發送給用戶
2. 用戶會根據服務器發來的公鑰對密碼進行加密
3. 加密后的信息回傳給服務器,服務器用自己的密鑰解密,如果密碼正確,則用戶登陸成功。
基于密鑰登錄方式
1.
1. 首先在客戶端生成一對密鑰(ssh-keygen 命令,可交互式設置)
2. 將客戶端的公鑰ssh-copy-id 拷貝到服務器端
3. 當客戶端再次發送一個鏈接請求,包括ip、用戶名
4. 服務端得到客戶端的請求后,會到authorized_keys中查找,如果有響應的IP和用戶,就會隨機生成一個字符串,例如:cadf
5. 服務端將使用客戶端拷貝過來的公鑰進行加密,然后發送給客戶端
6. 得到服務端發來的消息后,客戶端會使用私鑰進行解密,然后將解密后的字符串發送給服服務端
7. 服務端接收到客戶端發來的字符串后,跟之前的字符串進行比對,如果一直就允許免密碼登錄。
基于密鑰認證的實現方法。
1.
1. 在客戶端生成密鑰對
1. ssh-keygen -t rsa [-p ”] [-f “~/.ssh/id_sra”]
2. 把公鑰文件傳輸至遠程服務器對應用戶的家目錄
1. ssh-copy-id [-i [identity_file]] [user@]host
3. 測試 測試是否已經成功。
重新設置私鑰口令
ssh-keygen -p
驗證代理 (authentication agent) 保密解密后的密鑰
1.
1. 這樣口令就只需要輸入一次
2. 在GNOME中,代理被自動提供給root用戶
3. 否則運行ssh-agent bash
鑰匙通過命令添加給代理
ssh-add
scp命令
實現從遠程拷貝到本機,或者從本機拷貝到遠程。
scp 選項 源 目的地址
詳細格式:
scp 選項 [user@]host:/文件路徑 /文件路徑
scp 選項 /文件路徑 [user@]host:/文件路徑
常用選項
-c:壓縮數據流
-r:遞歸復制
-p:保持原文件屬性信息
-q:靜默模式
-P 端口號:指明remote host的監聽的端口
rsync命令:
基于ssh和rsh服務實現高效率的遠程系統之間復制文件
使用安全的shell連接作為傳輸方式
rsync -av /etc server1:/tmp 復制目錄和目錄下的文件
rsync -av /etc/ server1:/tmp 只復制目錄下的文件
比scp更快,只復制不同的文件
選項:
-n 模擬復制過程
-v 詳細顯示過程
-r 遞歸復制目錄樹
-p 保留權限
-t 保留時間戳
-g 保留組信息
-o 保留所有者信息
-l 將軟連接文件本身進行復制(默認)
-L 將軟鏈接文件指向的文件復制
-a 存檔,相當于-rlptgoD,但不保留ACL(-A)和selinux屬性(-X)
sftp命令:
交互式文件傳輸工具
用法和傳統的ftp工具相似
利用ssh服務實現安全的文件上傳和下載
使用ls cd mkdir rmdir pwd get put 等指令,可用?或help獲取幫助信息、也可(!命令 操作本機)
sftp [user@]host
sftp > help
ssh端口轉發
ssh會自動加密和解密所有ssh客戶端與服務器端之間的網絡數據。但是,ssh還能夠將其他tcp端口的網絡數據通過ssh鏈接來轉發,并且自動提供了相應的加密及解密服務。這一過程也被叫做“隧道”(tunneling),這是因為ssh為其他tcp鏈接提供了一個安全的通道來進行傳輸而得名。例如,telent,SMTP,LDAP這些tcp應用均能夠從中得益,避免了用戶名,密碼以及隱私信息的明文傳輸。而與此同時,如果工作環境中的防火墻限制了一些網絡端口的使用,但是允許ssh的連接,也能夠通過將tcp端口轉發來使用ssh進行通訊。
ssh端口轉發能夠提供兩大功能:
加密ssh client 端至ssh server端之間的通訊數據
突破防火墻的限制完成一些之前無法建立的tcp連接
本地端口轉發
-L 本機端口號:目標ip:目標端口 -N 中轉的ip
-f 后臺啟用 -N 不打開遠程shell,處于登錄狀態 -g 啟用網關功能
示例:ssh -L 9527:telnetrv:23 -N sshsrv
telnet 127.0.0.1 9527
當訪問本機的9527的端口時,被加密后轉發到sshsrv的ssh服務,在解密被轉發到telnetsrv:23
遠程轉發:
-R 9527:目標主機ip:目標主機端口 -N sshsrv
示例:讓sshsrv偵聽9527端口的訪問,如有訪問,就加密后通過ssh服務轉發請求到本機ssh客戶端,再由本機解密后轉發到telnetsrv:23
動態端口轉發:
當用firefox訪問internet時,本機的1080端口作為代理服務器,firefox的訪問請求被轉發到sshsserver上,由sshserver替之訪問internet。
相當于,需要的數據全都經由服務器中轉訪問。
在本機firefox設置代理socket proxy:127.0.0.1:1080
ssh -D 1080 root@sshserver
圖形轉發
所有圖形化應用程序都是X客戶程序
能夠通過tcp/ip連接遠程X服務器
數據沒有加密機,但是它通過ssh連接隧道安全進行
ssh -X user@remotehost gedit
remotehost主機上的gedit工具,將會顯示在本機的X服務器上
傳輸的數據將通過ssh連接加密
ssh服務器端的配置文件
sshd,配置文件:/etc/ssh/sshd_config man幫助 man sshd_config
常用參數
port
listenaddress ip
logingracetime 2m
permintrootlogin yes
strictmodes yes
maxauthtries 6
maxsessions 10
pubkeyauthentication yes
permitemptypasswords no
passwordauthentication yes
gatewayports no
clientaliveinterval (單位秒)
clientalivecountmax (默認3)
usedns yes
gssapiauthentication yes
maxstartups 未認證的連接數最大值,默認值 10 也指并發鏈接數
banner /path/file
限制可登錄用戶的辦法
AllowUsers user1 user2 user3
DenyUser
AllowGroups
DenyGroups
ssh服務的安全配置思想
不要使用默認端口
禁止使用protocol version 1
限制可登錄用戶
設定空閑會話超時時間
利用防火墻設置ssh訪問策略
僅監聽特定的IP地址
基于口令認證時,使用強密碼策略
tr -dc A-Za-z0-9_ < /dev/urandom |head -30 |xargs
使用基于密鑰的認證
禁止使用空密碼
禁止root用戶直接登錄
限制ssh的訪問頻度和并發在線數
做好日志,經常分析
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/87598