1.ssh: secure shell, protocol, 22/tcp, 安全的遠程登錄
(1)具體的軟件實現(xiàn):
OpenSSH: ssh協(xié)議的開源實現(xiàn)诞吱,CentOS默認安裝
dropbear:另一個開源實現(xiàn)
(2)SSH協(xié)議版本
v1: 基于CRC-32做MAC透乾,不安全;man-in-middle
v2:雙方主機協(xié)議選擇安全的MAC方式
基于DH算法做密鑰交換豺型,基于RSA或DSA實現(xiàn)身份認證
(3)兩種方式的用戶登錄認證:
基于password
基于key
2.Openssh軟件組成
相關(guān)包:
openssh
查看:
rpm -ql openssh-clients客戶端/usr/bin/ssh
rpm -ql openssh-server服務(wù)器端/usr/sbin/sshd
? 工具:
基于C/S結(jié)構(gòu)
Client: ssh, scp, sftp,slogin
Windows客戶端:
xshell, putty, securecrt, sshsecureshellclient
Server: sshd
3.ssh客戶端
配置文件:/etc/ssh/ssh_config
Host PATTERN
StrictHostKeyChecking no 首次登錄不顯示檢查提示
格式:ssh [user@]host [COMMAND]
ssh [-l user] host [COMMAND]
-p port:遠程服務(wù)器監(jiān)聽的端口
-b:指定連接的源IP(就是說你自己主機上有多個IP,用你要用的連接)
-v:調(diào)試模式
-C:壓縮方式
-X: 支持x11轉(zhuǎn)發(fā)喘先,打開對方圖形界面
-Y:支持信任x11轉(zhuǎn)發(fā)ForwardX11Trusted yes
(就是說如果A要連接C楷扬,但是C只能用B來連接解幽,就可以通過B來連接C eg:A#ssh B ssh C)
ForwardX11Trusted yes
-t: 強制偽tty分配
ssh -t remoteserver1 ssh remoteserver2
允許實現(xiàn)對遠程系統(tǒng)經(jīng)驗證地加密安全訪問
ss -nt 查看
當用戶遠程連接ssh服務(wù)器時,會復(fù)制ssh服務(wù)器 /etc/ssh/ssh_host*key.pub(CentOS7默認是ssh_host_ecdsa_key.pub)文件中的公鑰到客戶機的~./ssh/know_hosts中毅否。下次連接時亚铁,會自動匹配相應(yīng)私鑰 ,不能匹配螟加,將拒絕連接
第一次連接別的主機時徘溢,把對方的公要復(fù)制過來吞琐,然后和對方的私鑰解密,所以要冒充鏈接要知道對方的私鑰然爆,私鑰文件在/etc/ssh/ssh_host_rsa_key
4.ssh服務(wù)登錄驗證
兩種方式:
(1)基于用戶和口令登錄驗證
1 客戶端發(fā)起ssh請求站粟,服務(wù)器會把自己的公鑰發(fā)送給用戶
2 用戶會根據(jù)服務(wù)器發(fā)來的公鑰對密碼進行加密
3 加密后的信息回傳給服務(wù)器,服務(wù)器用自己的私鑰解密曾雕,如果密碼正確奴烙,則用戶登錄成功
(2)基于密鑰的登錄方式
1.首先在客戶端生成一對密鑰(ssh-keygen)
2.并將客戶端的公鑰ssh-copy-id 拷貝到服務(wù)端
3.當客戶端再次發(fā)送一個連接請求,包括ip剖张、用戶名
4.服務(wù)端得到客戶端的請求后切诀,會到authorized_keys中查找,如果有響應(yīng)的IP和用戶搔弄,就會隨機生成一個字符串幅虑,例如:acdf
5.服務(wù)端將使用客戶端拷貝過來的公鑰進行加密,然后發(fā)送給客戶端
6.得到服務(wù)端發(fā)來的消息后顾犹,客戶端會使用私鑰進行解密倒庵,然后將解密后的字符串發(fā)送給服務(wù)端
7.服務(wù)端接受到客戶端發(fā)來的字符串后,跟之前的字符串進行對比炫刷,如果一致擎宝,就允許免密碼登錄
5.基于密鑰的認證:
(1) 在客戶端生成密鑰對
ssh-keygen -t rsa [-P ''] [-f “~/.ssh/id_rsa"]
-t 指定要用的算法 rsa/dsa
-P加口令
-f指定密鑰文件路徑
(2) 把公鑰文件傳輸至遠程服務(wù)器對應(yīng)用戶的家目錄
ssh-copy-id [-i [identity_file]] [user@]host
-i指定復(fù)制的文件,生成的文件默認放在.ssh下
如果不指定復(fù)制到對方的文件,默認放在 .ssh/authorized_keys
Paste_Image.png
(3) 測試
在客戶機端再用ssh連接服務(wù)器就可以不輸入密碼或者只用輸入私鑰密碼
(4) 在SecureCRT或Xshell實現(xiàn)基于key驗證
在SecureCRT工具—>創(chuàng)建公鑰—>生成Identity.pub文件
轉(zhuǎn)化為openssh兼容格式(適合SecureCRT浑玛,Xshell不需要轉(zhuǎn)化
格式)绍申,并復(fù)制到需登錄主機上相應(yīng)文件authorized_keys中,
注意權(quán)限必須為600,在需登錄的ssh主機上執(zhí)行:
ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys
(5)重設(shè)私鑰口令:
ssh-keygen –p
Paste_Image.png
(6)驗證代理(authentication agent)保密解密后的密鑰
? 這樣口令就只需要輸入一次
? 在GNOME中锄奢,代理被自動提供給root用戶
? ssh-agent bash 啟動代理
(7)鑰匙通過命令添加給代理
ssh-add
把口令托管給代理失晴,以后再連接就不需要口令了,但是一注銷終端拘央,就需要重新登錄
6.scp命令
scp [options] SRC... DEST/
兩種方式:
scp [options] [user@]host:/sourcefile /destpath把遠程主機文件復(fù)制到本地
scp [options] /sourcefile [user@]host:/destpath把本地文件復(fù)制到遠程
scp不適合網(wǎng)站更新
常用選項:
-C: 壓縮數(shù)據(jù)流
-r: 遞歸復(fù)制
-p: 保持原文件的屬性信息
-q: 靜默模式
-P PORT: 指明remote host的監(jiān)聽的端口
7.rsync命令
? 基于ssh和rsh服務(wù)實現(xiàn)高效率的遠程系統(tǒng)之間復(fù)制文件
? 使用安全的shell連接做為傳輸方式
? 比scp更快涂屁,只復(fù)制不同的文件,可以實現(xiàn)增量備份
? rsync –av /etc server1:/tmp 復(fù)制目錄和目錄下文件
? rsync –av /etc/ server1:/tmp 只復(fù)制目錄下文件
? 選項:
-n 模擬復(fù)制過程
-v 顯示詳細過程
-r 遞歸復(fù)制目錄樹
-p 保留權(quán)限
-t 保留時間戳
-g 保留組信息
-o 保留所有者信息
-l 將軟鏈接文件本身進行復(fù)制(默認)
-L 將軟鏈接文件指向的文件復(fù)制
-a 存檔,相當于–rlptgoD灰伟,但不保留ACL(-A)和SELinux屬性(-X)
8.sftp命令
? 交互式文件傳輸工具
? 用法和傳統(tǒng)的ftp工具相似
? 利用ssh服務(wù)實現(xiàn)安全的文件上傳和下載
? 使用ls cd mkdir rmdir pwd get put等指令拆又,可用?或help
獲取幫助信息
sftp [user@]host
sftp> help
9.SSH端口轉(zhuǎn)發(fā)
SSH 會自動加密和解密所有 SSH 客戶端與服務(wù)端之間的網(wǎng)絡(luò)數(shù)據(jù)栏账。 但是帖族,SSH 還能夠?qū)⑵渌?TCP 端口的網(wǎng)絡(luò)數(shù)據(jù)通過 SSH 鏈接來轉(zhuǎn)發(fā) ,并且自動提供了相應(yīng)的加密及解密服務(wù)挡爵。這一過程也被叫做“隧道” (tunneling)竖般,這是因為 SSH 為其他 TCP 鏈接提供了一個安全的通 道來進行傳輸而得名。例如茶鹃,Telnet涣雕,SMTP艰亮,LDAP 這些 TCP 應(yīng)用均能夠從中得益,避免了用戶名挣郭,密碼以及隱私信息的明文傳輸迄埃。而與此同時,如果工作環(huán)境中的防火墻限制了一些網(wǎng)絡(luò)端口的使用兑障,但是允許SSH 的連接侄非,也能夠通過將 TCP 端口轉(zhuǎn)發(fā)來使用 SSH 進行通訊
(1)SSH 端口轉(zhuǎn)發(fā)能夠提供兩大功能:
? 加密 SSH Client 端至 SSH Server 端之間的通訊數(shù)據(jù)
? 突破防火墻的限制完成一些之前無法建立的 TCP 連接
遠程連接到本地
(2)本地轉(zhuǎn)發(fā):
-L localport:remotehost:remotehostport sshserver
選項:
-f 后臺啟用
-N 不打開遠程shell,處于等待狀態(tài)
-g 啟用網(wǎng)關(guān)功能
eg:
ssh –L 9527:telnetsrv:23 -N sshsrv
telnet 127.0.0.1 9527 當訪問本機的9527的端口時流译,被加密后轉(zhuǎn)發(fā)到sshsrv的ssh服務(wù)逞怨,再解密被轉(zhuǎn)發(fā)到telnetsrv:23
data ? ? localhost:9527 ? ? localhost:XXXXX ? ?
sshsrv:22 ? ? sshsrv:YYYYY ? ? telnetsrv:23
(3)遠程轉(zhuǎn)發(fā):
-R sshserverport:remotehost:remotehostport sshserver
eg:
ssh –R 9527:telnetsrv:23 –N sshsrv
讓sshsrv偵聽9527端口的訪問,如有訪問福澡,就加密后通過ssh
服務(wù)轉(zhuǎn)發(fā)請求到本機ssh客戶端骇钦,再由本機解密后轉(zhuǎn)發(fā)到
telnetsrv:23
Data ? ? sshsrv:9527 ? ? sshsrv:22 ? ?
localhost:XXXXX ? ? localhost:YYYYY ? ? telnetsrv:23
(3)動態(tài)端口轉(zhuǎn)發(fā):
當用firefox訪問internet時,本機的1080端口做為代理服務(wù)器竞漾,firefox的訪問請求被轉(zhuǎn)發(fā)到
sshserver上,由sshserver替之訪問internet在本機firefox設(shè)置代理socket proxy:127.0.0.1:1080
ssh -D 1080 root@sshserver
10.X 協(xié)議轉(zhuǎn)發(fā)
所有圖形化應(yīng)用程序都是X客戶程序
? 能夠通過tcp/ip連接遠程X服務(wù)器
? 數(shù)據(jù)沒有加密機,但是它通過ssh連接隧道安全進行
ssh -X user@remotehost gedit
remotehost主機上的gedit工具窥翩,將會顯示在本機的X服務(wù)器上傳輸?shù)臄?shù)據(jù)將通過ssh連接加密
11.ssh服務(wù)器
服務(wù)器端:sshd, 配置文件: /etc/ssh/sshd_config
? 常用參數(shù):
? Port
? ListenAddress ip
? LoginGraceTime 2m
? PermitRootLogin yes
? StrictModes yes
? MaxAuthTries 6
? MaxSessions 10 同一個連接最大會話
? PubkeyAuthentication yes
? PermitEmptyPasswords no
? PasswordAuthentication yes
? GatewayPorts no
? ClientAliveInterval(單位:秒)
? ClientAliveCountMax(默認3)
? UseDNS yes
? GSSAPIAuthentication yes 提高速度可改為no
? MaxStartups 未認證連接最大值业岁,默認值10
? Banner /path/file
限制可登錄用戶的辦法:
AllowUsers user1 user2 user3
DenyUsers
AllowGroups
DenyGroups
ssh服務(wù)的最佳實踐
? 不要使用默認端口
? 禁止使用protocol version 1
? 限制可登錄用戶
? 設(shè)定空閑會話超時時長
? 利用防火墻設(shè)置ssh訪問策略
? 僅監(jiān)聽特定的IP地址
? 基于口令認證時,使用強密碼策略
tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30| xargs
? 使用基于密鑰的認證
? 禁止使用空密碼
? 禁止root用戶直接登錄
? 限制ssh的訪問頻度和并發(fā)在線數(shù)
? 做好日志寇蚊,經(jīng)常分析