author:JevonWei
版权声明:原创作品
SSH
-
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
Windows客户端:
xshell,putty,securecrt, sshsecureshellclient
Server: sshd
ssh 客户端
-
ssh, 配置文件:
/etc/ssh/ssh_config
Host PATTERN
StrictHostKeyChecking no 首次登录不显示检查提示
-
格式:ssh [user@]host [COMMAND]
ssh [-l user] host [COMMAND]
-p port:远程服务器监听的端口
-b: 指定连接的源IP
-v: 调试模式
-C:压缩方式
-X:图形化连接
-Y:支持信任x11转发
ForwardX11Trusted yes
-t:强制伪tty分配
ssh -t remoteserver1 ssh remoteserver2 -
允许实现对远程系统经验证地加密安全访问
-
当用户远程连接ssh服务器时,会复制ssh服务器/etc/ssh/ssh_host*key.pub (CentOS7 默认是ssh_host_ecdsa_key.pub)文件中的公钥到客户机的~./ssh/know_hosts 中。下次连接时,会自动匹配相应私钥
,不能匹配,将拒绝连接
基于key 认证
-
基于密钥的认证:
(1)在客户端生成密钥对
ssh-keygen -t rsa [-P ''] [-f “~/.ssh/id_rsa"]
(2)把公钥文件传输至远程服务器对应用户的家目录
ssh-copy-id [-i [identity_file]] [user@]host
(3)测试
(4)在SecureCRT或Xshell实现基于key验证在SecureCRT 工具—> 创建公钥—> 生成Identity.pub文件转化为openssh 兼容格式(适合SecureCRT ,Xshell不需要转化格式),
并复制到需登录主机上相应文件authorized_keys中,注意权限必须为600,在需登录的ssh主机上执行:
ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys
(5)重设私钥口令:#ssh-keygen –p
(6)验证代理(authentication agent)保密解密后的密钥
这样口令就只需要输入一次
在GNOME中,代理被自动提供给root用户
否则运行ssh-agent bash
(7)钥匙通过命令添加给代理
ssh-add
SSH 端口转发
-
什么是SSH端口转发?
SSH会自动加密和解密所有SSH客户端与服务端之间的网络数据。但是,SSH还能够将其他TCP端口的网络数据通过SSH链接来转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”
(tunneling),这是因为SSH他为其他TCP链接提供了一个安全的通道来进行传输而得名。例如,Telnet,SMTP,LDAP些 这些TCP应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果工作环境中的防火墙限制了一些网络端口的使用,但是允许SSH的连接,也能够将通过将TCP端口转发来使用SSH进行通讯 -
SSH端口转发能够提供两大功能:
加密SSH Client端至SSH Server端之间的通讯数据
突破防火墙的限制完成一些之前无法建立的TCP
SSH端口转发
本地转发:
-L localport:remotehost:remotehostport sshserver
选项:
-f 后台启用
-N 不打开远程shell,处于等待状态
-g 启用网关功能
示例
ssh –L 9527:telnetsrv:23 -N sshsrv
telnet 127.0.0.1 9527
当访问本机的9527的端口时,被加密后转发到sshsrv的ssh服务,再解密被转发到telnetsrv:23
data <- -> localhost:9527 <- -> localhost:XXXXX <- ->
sshsrv:22 <- -> sshsrv:YYYYY <- -> telnetsrv:23
远程转发:
-R sshserverport:remotehost:remotehostport sshserver
示例:
ssh –R 9527:telnetsrv:23 –N sshsrv
让sshsrv侦听9527端口的访问,如有访问,就加密后通过ssh服务转发请求到本机ssh客户端,再由本机解密后转发到telnetsrv:23
Data <- -> sshsrv:9527 <- -> sshsrv:22 <- -> localhost:XXXXX <- -> localhost:YYYYY <- -> telnetsrv:23
动态端口转发:
当用firefox访问internet时,本机的1080端口做为代理服务器,firefox的访问请求被转发到sshserver上,由sshserver替之访问internet
在本机firefox设置代理socket proxy:127.0.0.1:1080
ssh -D 1080 root@sshserver
X协议转发
-
所有图形化应用程序都是X 客户程序
能够通过tcp/ip连接远程X服务器
数据没有加密机,但是它通过ssh 连接隧道安全进行 -
ssh -X user@remotehost gedit
remotehost主机上的gedit工具,将会显示在本机的X服务器上
传输的数据将通过ssh连接加密
ssh服务器
-
服务器端:sshd
man sshd_config
配置文件:/etc/ssh/sshd_config(服务端)
/etc/ssh/ssh_config(客户端)
常用参数:
Port 端口号
AddressFamily any 指明可使用ipv4和ipv6地址
ListenAddress 0.0.0.0 监听的IP
#SyslogFacility AUTH 意为日志存放在/var/log/secure
SyslogFacility AUTHPRIV 日志级别
#LoginGraceTime 2m 等待连接宽限时间2分钟
#PermitRootLogin yes 禁止root用户直接登录
#StrictModes yes 限制模式
#MaxAuthTries 6 密码输入错误次数为3时退出
#MaxSessions 10 同一个主机的最大会话数为10次
#ClientAliveInterval 0 客户端的活动间隔 (单位:秒) #ClientAliveCountMax 3 客户端最大活动间隔统计次数
UseDNS yes 使用DNS反向解析IP
PidFile /var/run/sshd.pid PID文件
MaxStartups 最大允许保持多少个未认证连接,默认值10
#Banner /etc/ssh.txt ssh连接时提示信息文件
PsswordAuthentication yes 基于密码认证登录
PermitEmptyPasswords no 基于key认证的登录限制可登录用户的办法: AllowUsers user1 user2 user3 允许用户连接 DenyUsers 拒绝用户 AllowGroups 允许组 DenyGroups DenyUser的优先级大于AllowUsers
ssh服务的最佳实践
要使用默认端口
禁止使用protocol version 1
限制可登录用户
设定空闲会话超时时长
利用防火墙设置ssh访问策略
仅监听特定的IP地址
基于口令认证时,使用强密码策略
tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30| xargs
使用基于密钥的认证
禁止使用空密码
禁止root用户直接登录
限制ssh的访问频度和并发在线数
做好日志,经常分析
编译安装dropbear示例
-
ssh协议的另一个实现:dropbear
安装准备:
1、安装开发包组:
2、ftp://172.16.0.1/pub/Sources/sources/dropbear/dropbear-2013.58.tar.bz2
安装:
3、tar xf dropbear-2013.58.tar.bz2,
4、less INSTALL
5、./configure
6、make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"
7、make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install
启动ssh服务:
8、ls /usr/local/sbin/ /usr/local/bin/
9、/usr/local/sbin/dropbear -h
10、mkdir /etc/dropbear
11、dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key -s 2048
12、dropbearkey -t dss -f /etc/dropbear/dropbear_dsa_host_key
13、dropbear -p :2222 -F –E #前台运行
dropbear -p :2222 #后台运行
客户端访问:
14、ssh -p 2222 root@127.0.0.1
15、dbclient -p 2222 root@127.0.0.1