OpenSSH简介
OpenSSH是SSH(Secure Shell)协议的免费开源实现,SSH协议族可以用来进行远程控制 ,或在计算机之间传送文件, 而实现此功能的传统方式,如telnet(终端仿真协议),rcp,ftp,rlogin,rsh都是极为不安全的,并且会使用明文传送密码,OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控制和文件传输过程中的数据 ,并由此来代替原来的类似服务.目前OpenSSH是OpenBSD的子计划.
OpenSSH的工作特性
-
C/S架构,工作在22/TCP端口
- Client端软件
XShell
Securecrt
Putty
- Client端软件
-
使用非对称加密算法进行来源主机身份确认
- 当客户端第一次连接服务端时, 服务端会将其公钥发送给客户端, 并且提示用户接受公钥信息,并保存至用户家目录下
.ssh
目录下的known_host文件中. 在下一次连接的时候,如果对方公钥与之文件中对应的主机不符合时,将拒绝连接
- 当客户端第一次连接服务端时, 服务端会将其公钥发送给客户端, 并且提示用户接受公钥信息,并保存至用户家目录下
-
使用DH算法进行密钥交换
- 在连接过程中,SSH的传输使用DH交换密钥机制生成的密钥加密数据(是使用对称加密算法).默认每隔一个小时会重新协商加密密钥.
-
默认不允许root用户远程登陆系统
-
私钥存放在本地,公钥存放在对方known_host文件中
-
用户登录认证机制:
-
基于口令的认证
: 用户输入帐号和密码 -
基于密钥的认证
: 用户提供一对儿密钥,私钥保留在本地,公钥存在远程服务端的用户家目录下.ssh/known_host文件中.- 支持的密钥加密方法
RSA
DSA
ECDSA
ED25519
- 支持的密钥加密方法
-
ssh protocol version
- V1 : 不安全,建议不使用
- V2 : 目前主流版本
OpenSSH的配置文件
- SSH服务端
/etc/ssh/sshd_config
- SSH客户端
/etc/ssh/ssh_config
OpenSSH的服务进程
- Centos 6
service sshd start
- Centos 7
systemctl start sshd
OpenSSH客户端工具的使用
- 使用格式
-
ssh [options] [user@host []COMMMAND]
-
ssh -l user host [command]
-
OPTIONS
-
-l USER
: 以指定的用户登录远程主机,跟user@功能一样 -
-p PORT
: 用于指明远程服务端的端口 -
-X
: 支持X11转发 -
-Y
: 支持信任的X11转发X: 是x-window的协议 11: 是其x-window的版本号
-
-o stricHostKeyChecking=no
: 不作严格的key
-
-
使用公钥认证连接主机
-
ssh-keygen命令
- 格式格式
-
ssh-keygen -q -b BITS -t TYPE [-f output_keyfile] [-p PASSWORD]
-
OPTIONS
-
-t TYPE
: 密钥的算法类型,如rsa,dsa,ecdsa,ed25519 -
-b BITS
: 指明密钥长度 -
-p PASSWORD
: 私钥加密密码 -
-f OUTPUT_KEYFILE
: 生成密钥的保存位置,生成有密码将会保存到/etc/ssh/目录下, 私钥与公钥成对出现 ,公钥以Pub后缀结束 -
-q
: 静默模式
-
-
- 格式格式
-
操作步骤
- 1 在本地主机生成一对儿密钥
ssh-keygen -t rsa -P '' -f /root/.ssh/id_rsa
- 2 在本地主机上, 将公钥复制到要登录的远程主机的用户家目录下的特定文件中(~/.ssh/authorized_keys)
ssh-copy-id -i .ssh/id_rsa.pub root@172.16.100.68 ssh-copy-id命令是ssh自带的文件传输工具, 就以将通过-i参数指定的文档自动传输到指定主机指定用户家目录文件中.
scp命令(基于ssh连接完成复制)
-
[options]
-
-r
: 递归复制 -
-p
: 保持原文件的权限信息 -
-q
: 静默模式 -
-P PORT
: 指定远程主机的ssh协议监听的端口
scp ~/.ssh/id_rsa root@172.16.36.70:/root/
-
sftp命令
sftp也是一个C/S架构, 服务端由SSHD服务进程管理, 是SSHD的一个子系统,在Centos系统上的openssh,默认启用. Client是sftp
使用格式: sftp user@host
sshd配置文件: /etc/sshd_config
-
文本格式:
配置指令 值
-
常用指令
-
port 22
: 监听的端口 -
ListenAddress 0.0.0.0
: 监听的地址 -
AddressFminy any
: ipv4,ipv6的地址 -
keyregenerationInterval 1H
: 密钥更新时长 -
ServerKeybits 1024
: 对称密钥长度 -
LoginGraceTime 2m
: 用户登陆的等待时长 -
premiRootLogin yes
: 是否允许管理员远程登陆 -
StricModes yes
: 是否使用严格模式 -
Maxauthtries 6
: 密码错误重度次数 -
MaxSessions 10
: 最大会话连接数,基也是使用子进程响应用户请求 -
RSAuthentication yes
: 是否支持基于密钥的认证功能 -
Pubkeyauthentication yes
: 是否支持基于公钥的认证功能(以上一项一同使用) -
RhostsRSAAuthentication yes
: 如果在known_host文件中不存在, 就不连接, 默认是关闭的,值为No -
HostBaseauthentication no
: 是不是必须使用密钥进行认证 -
passwordauthentication yes
: 是否允许基于口令的认证方式 -
challengeresponseauthentication no
: 挑战式身份认证 -
kerberos
: 基于对称加密的统一解决方案 -
usepam yes
: 认证过程基于pam完成 -
AcceptEnv
: 接受那些环境变量 -
printmotd yes
: 是否在登录的时候打印motd信息,文件在/etc/motd中 -
printLastlog yes
: 是否显示上一次登陆信息 -
usedens no
: 当用户访问sshd服务时, sshd会反解客户端的ip地址,默认为yes, 建议关闭 -
subsystem sftp /usr/libexec/openssh/sftp-server
: 调用时需要使用sftp-server的全路径 -
allowusers user1 user2 user3....
: 允许指定用户才能登陆sshd -
allowgroups mygrp1 mygrp2 mygrp3....
: 允许指定组的用户才能登陆sshd -
denyusers user1 user2 user3....
: 拒绝指定用户 -
denygroups mygrp1 mygrp2 mygrp3....
: 拒绝指定组
deny的动作优先级高于所有allow, allow是做白名单, deny是做黑名单
-
ssh相关的man手册
- man sshd_config : 查看sshd的配置选项
- man sshd
- man ssh_config : 查看客户端的配置选项
- man ssh
SSH服务的最佳实践
- 1 不要使用默认端口
- 2 禁止使用协议版本V1 (protocol version 1)
- 3 限制可登陆的用户(最好做白名单)
- 4 设定空闲会议超时时长
- 5 利用防火墙设置ssh访问策略
- 6 仅监听特定的IP地址(一般只监听私网上的IP地址)
- 7 基于口令认证时,要使用强密码策略
- 生成随机密码方法:
tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 | xargs
- 生成随机密码方法:
- 8 使用基于密钥的认证
- 9 要禁止使用空密码登录
- 10 禁止root用户直接登录
- 11 限制ssh的访问频度和并发在线数
- 12 做好日志,经常分析
- 日志存放: /var/log/secure
Linux之dropbear
ssh协议的另一个实现, 轻量化ssh的实现方案,多用于嵌入式环境中
轻量化的实现方案,多用于嵌入式环境中
dropbearkey -t rsa -s 2048 -f /etc/dropbear/dropbear_rsa_host_key
dropbearkey -t ecdsa -s 512 -f /etc/dropbear/dropbear_ecdsa_host_key
dropbear -p 2202 -F -E
常用工具:
dbclient : 客户端程序
dropbearkey : 主机密钥生成工具
/etc/dropbear
服务端程序 :
dropbear
-p [ip:]Port
-F : 前台 运行
-E : 将日志发往错误输出
网友评论