一、SSH协议
1.ssh: secure shell protocol, 安全的远程登录
默认监听在22/tcp,用以取代较早的telnet远程登录协议(监听与23/tcp,明文认证过程),C/S模式
Client: ssh, scp, sftp
Windows客户端:xshell, putty, securecrt, sshsecureshellclient
Server: sshd
2.SSH协议版本
v1:基于CRC-32做MAC,不安全;man-in-middle
v2:双方主机协议选择安全的MAC方式
基于DH算法做密钥交换,基于RSA或DSA算法实现身份认证;
3.ssh认证过程
(1)主机认证:需要用到主机认证密钥;由服务器端维护和提供;
(2)用户登录认证
基于口令的认证:用户名和密码认证
基于密钥的认证:用户提供一对儿密钥,私钥保留在客户端,公钥保留于远程服务器端的用户家目录下;
4.Linux实现软件
OpenSSH:ssh协议的开源实现
dropbear:另一个开源实现;
二、OpenSSH配置文件(centOS 6)
1.[root@localhost ~]# ls -l /etc/ssh
六个密钥实现主机认证,三对是两种不同协议版本使用,支持
2.ssh(客户端):/etc/ssh/ssh_config
接收的所有认可的服务器列表:~/.ssh/known_hosts
HOST patttern
OPTION1VALUE
OPTION2VALUE
...
3.sshd(服务器端):/etc/ssh/sshd_config
(1)格式:配置指令 值
man sshd_config、man sshd
常用指令 | #注释均为默认启用 |
Port 22 | 指明要监听的端口,默认22 |
ListenAddress 0.0.0.0 | 指明要监听的地址,默认所有地址 |
Protocol 2 | 定义协议版本 |
KeyRegenerationInterval 1h | 密钥更新时长 |
ServerKeyBits 1024 | 密钥长度 |
LoginGraceTime 2m | 连接等待时长 |
PermitRootLogin yes | 允许root直接登录 |
StrictModes yes | 严格权限 |
MaxAuthTries 6 | 最大连接尝试输入次数 |
MaxSessions 10 | 最大并发访问会话数 |
UseDNS | 使用DNs反解地址到主机名不使用 |
Allowuser USERNAME@IP | 允许用户登录:指定用户从IP登录 |
(2)限制可登录的用户(配置文件):
AllowUsers user1 user2 user3 ...
AllowGroups grp1 grp2 ...
DenyUsers user1 user2 ...
DenyGroups grp1 grp2 ...
(3)服务脚本
CentOS 6:/etc/rc.d/init.d/sshd
CentOS 7:Systemd UnitFile:/usr/lib/systemd/system/sshd.service
三、Openssh指令
1.ssh: 基于ssh协议完成远程连接
格式:ssh [USERNAME@]HOST [COMMAND]
ssh [-l USERNAME] HOST [COMMAND]
常用选项:
-l user:以指定的用户登录远程主机;省略用户名使用本地用户名作为远程登录的用户名;
-pport:指明远程服务器的端口;
-X:支持X11转发;
-Y:支持信任的X11转发;
X:x-window协议
X11转发:在本地显示远程主机上的图形窗口;本地是X图形界面,或者提供了xservice;
-o StrictHostKeyChecking=no:自动接收保存认证密钥,不用手动输入yes确认;可在/etc/ssh/ssh_config配置
2.scp:基于ssh协议完成远程跨主机复制
scp [options] SRC... DEST/
scp [options] SRC DEST
存在两种使用情形:
PULL: scp [options] [user@]host:/PATH/TO/SOMEFILE /PATH/TO/SOMEFILE
PUSH: scp [options] /PATH/TO/SOMEFILE [user@]host:/PATH/TO/SOMEFILE
常用选项:
-r:递归复制,复制目录;
-p:保持原文件的权限信息;
-q:静默模式;
-PPORT:指明远程主机ssh协议监听的端口;
3.sftp命令
(1)ftp:filetransfer protocol,文件传输协议,明文;
安全的文件传输机制:
ftps:ftp over ssl
sftp:ftp over ssh
(1)sftp:基于ssh协议文件传输,C/S架构
服务端:由sshd服务进程管理,是sshd的一个子系统,在centos系统上的openssh上,默认为启动状态;
/usr/libexec/openssh/sftp-server
客户端:即sftp;
连接至远程主机:sftp user@host
sftp>help
四、ssh用户密钥认证实现
1.客户端主机生成一对儿密钥
ssh-keygen [-q] [-b bits] [-t type] [-f output_keyfile] [-P passphrase]
-t {rsa|ecdsa|dsa}:公钥加密算法类型;
-bbits:指明密钥长度;
-Ppassphrase:私钥加密密码;
-foutput_keyfile:生成密钥的保存位置;
2.公钥传输至远程服务器对应用户的家目录(~/.ssh/authorized_keys)
ssh-copy-id [-i [identity_file]] [-p port] [-o ssh_option] [user@]hostname]
-i:指明本地公钥文件
-p:指明端口,默认22/tcp
注意:可以为不同的用书配置密钥
3.测试
ssh user@host
五、dropbear:ssh协议的另一个实现
1.dropbear:ssh实现
轻量化的实现方案,多用于嵌入式环境中;
2.常用工具
(1)dbclient:ssh协议客户端程序
dbclient[options] [user@]host[/port][,[user@]host/port],...] [command]
(2)dropbearkey:主机密钥生成工具
dropbearkey -t <type> -f <filename> [-s bits]
/etc/dropbear/
六、ssh服务实践注意事项
1.不要使用默认端口;
2.禁止使用protocol version 1;
3.限制可登录的用户;
4.设定空闲会话超时时长;
5.利用防火墙设置ssh访问策略;
6.仅监听特定的IP地址;
7.基于口令认证时,使用强密码策略;# tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 | xargs
8.使用基于密钥的认证;
9.禁止使用空密码;
10.禁止root用户直接登录;
11.限制ssh的访问频度和并发在线数;
12.做好日志,经常分析; /var/log/secure