- open-ssh服務
- ssh實驗
-
open-ssh
遠程服務工具Telnet、sshd等,Telnet傳輸基於明文,認證等均爲非加密;ssh協議開源的實現:centos 6 7默認安裝,Secure remote shell,允許認證加密方式登錄。- 服務安裝配置
系統默認安裝:[root@xt ~]# rpm -qa | grep ssh libssh2-1.4.3-10.el7.x86_64 openssh-6.6.1p1-22.el7.x86_64 openssh-server-6.6.1p1-22.el7.x86_64 openssh-clients-6.6.1p1-22.el7.x86_64
配置文件:
server:/etc/ssh/sshd_config client:/etc/ssh/ssh_config
服務腳本:
CentOS 6:
服務腳本:/etc/rc.d/init.d/sshd
CentOS 7:
Systemd Unit File:/usr/lib/systemd/system/sshd.service - 客戶端工具
Windows: xshell, securecrt, putty...;
openssh-clients使用:
ssh [options] [user@]host [command]
ssh [-l user] [options] host [command]:省略用戶名錶示使用當前用戶名作爲遠程登錄的用戶名
常用選項:-P port :用於指定遠程服務的端口 -X :支持X11轉發,在本地顯示遠程主機上的圖形窗口,但 前提:本地是X圖形界面,或者提供了x service;
sh遠程連接服務器時的配置選項,定義在/etc/ssh/ssh_config配置文件中
- 認證方式
1.基於口令認證:即每次ssh交互輸入登錄密碼
2.基於密鑰認證:非對稱加密- 在本地主機生成一對密鑰
ssh-keygen [-q] [-b bits] [-t type] [-f output_keyfile] [-P passphrase]
-t {rsa|ecdsa|dsa}: 公鑰加密算法,默認rsa 2048
-b bits:密鑰長度
-P passphrase :私鑰加密密碼
-f output_keyfile:生成密鑰的保存位置 - 在本地主機將公鑰複製到遠程主機的用戶家目錄
ssh-copy-id -i identity_file [-p port] [user@]host
ssh-copy-id -i .ssh/id_rsa.pub [email protected]
- 在本地主機生成一對密鑰
-
scp基於ssh實現跨主機文件複製
複製文件到遠程主機:scp [options] /PATH/TO/SOMEFILE [user@]host:/PATH/TO/SOMEFILE
複製文件到本地主機:scp [options] [user@]host:/PATH/TO/SOMEFILE /PATH/TO/SOMEFILE
常用選項:
-r:遞歸
-p:保持源文件權限
-q: 靜默模式
-P port:指定遠程服務的端口 - 最佳實踐
1、不要使用默認端口; 2、禁止使用protocol version 1;Protocol 2 3、限制可登錄的用戶; 在配置文件中配置: AllowUsers user1 user2 ... AllowGroups group1 group2... DenyUsers user1 user2... DenyGroups group1 group2 4、設定空閒會話超時時長; 5、利用防火牆設置ssh訪問策略; 6、僅監聽特定的IP地址; 7、基於口令認證時,使用強密碼策略(可以禁止) # tr -dc A-Za-z0-9_ < /dev/urandom | head -c 20 | xargs 8、使用基於密鑰的認證; 9、禁止使用空密碼; 10、禁止root用戶直接登錄; 11、限制ssh的訪問頻度和併發在線數; 12、做好日誌,經常分析; 13、設置TCP Wrappers 用TCP Wrappers可以阻止或允許應用服務僅對某些主機開放,給系統在增加一道安全屏障。這部分設置共涉計到兩個文件:hosts.allow和 hosts.deny eg: 在白名單中允許特定的主機訪問 sshd:192.168.0.100 192.168.0.200
- 服務安裝配置
實驗環境:
實驗1:模擬中間人attack
首先客戶端與server建立ssh通信,客戶端從服務端下載公鑰保存在家目錄.ssh/known_hosts文件,此時可以基於密碼或者密鑰遠程登錄server。修改server的密鑰文件模擬server attacked:
實驗2:密鑰互信實驗
[root@xt .ssh]# ls
id_rsa id_rsa.pub known_hosts
[root@xt .ssh]# ssh [email protected] hostname
node1.xuetong.com
這樣就實現了免密登錄,由於使用空密鑰,id_rsa* 這兩個文件有可能被竊取,僞裝成客戶端,可以使用對文件加密。
此時同樣把公鑰發送給node1
但此時還是要交互輸入密碼。此密碼保證了文件的安全性,僅在此機器有效。可以通過使用ssh-agent作爲代理,免去輸入密碼。