1.定义
ssh(Secure Shell 安全外壳) 可靠的专为远程登录会话提供的安全协议,可以有效封站远程管理过层中信息泄露问题
2.用途
通过 SSH Client (客户端) 我们可以连接到运行了 SSH Server (服务器) 的远程机器上
3.使用方法
<1>.scp 传输文件命令
从本地上传文件至远程服务器
scp 【本地文件路径】[username]@【主机ip】:拷贝的目录
从远程服务器下载文件到本地
ex: scp 1 root@43.143.216.88:/root
scp [username]@[主机ip]:[远程文件路径] 【本地文件路径】
ex: scp root@43.143.216.88:/root/1 /
<2>.ssh远程连接
ssh user@remote -p port
- user 是你在远程机器上的用户名,如果不指定的话默认为当前用户
- remote 是远程机器的地址,可以是 IP,域名,或者是后面会提到的别名
- port 是 SSH Server 监听的端口,如果不指定的话就为默认值 22ex
- exit 退出
ex: ssh root@43.143.216.88
<3>.安装 OpenSSH Server
centos kali 默认安装了openssh Ubuntu Desktop 系统,那么默认是没有安装
安装:
sudo apt-get install openssh-server
查询是否安装: dpkg -l | grep openssh
查看服务的状态: 在 kali上 systemctl status ssh.service
4.公钥私钥
<1>.意义
每次 ssh 都要输入密码是不是很烦呢?与密码验证相对的,是公钥验证。也就是说,要实现免密码登入,首先要设置 SSH 钥匙
<2>.图解![](https://i-blog.csdnimg.cn/blog_migrate/cc828c5ada4f88886e5cfad5b4307c10.png)
<3>.用法
1.执行 ssh-keygen 即可生成 SSH 钥匙,一路回车即可
2.密钥对的地址: root/.ssh 公钥放在了 ~/.ssh/id_rsa.pub 私钥放在了 ~/.ssh/id_rsa
3.我们要让远程机器记住我们的公钥
在服务器中修改配置 /etc/ssh/sshd_config 将内容修改为此内容 然后重启
通过命令将密钥拷贝至服务器 ssh-copy-id user@remote -p port
客户端有私钥 被登陆的服务器有客户端的公钥,公钥与私钥这一密钥对由客户端产生,上面我们使用的是rsa算法生成的密钥对 也可以使用dsa算法
5.openssh配置文件 加固
<1>.先删除服务器的公钥 以免影响后续实验
<2>.恢复配置文件 vim /etc/ssh/sshd_config
6 实验一 修改ssh的默认端口
<1>.步骤
vim /etc/ssh/sshd_config
重启后重新进行登录
<2>.配置文件
sshd_config 服务端配置文件
ssh_config 客户端配置文件
7.实验二 配置ssh日志
<1>.步骤
vim /etc/ssh/sshd_config
<2>.SyslogFacility 规定了日志的性质 同时规定了默认路径
loglevel 表示设置记录sshd日志信息级别
AUTHPRIV 表达用户记录的是包含敏感信息的用户身份验证消息 /var/log/secure
AUTH 表达不包含敏感信息用户的身份验证消息 /var/log/secure
ssh配置文件 log部分一般不需要做修改 但是Linux系统其他服务配置文件中,可能SyslogFacility会有下面这些状态
SyslogFacility
设置 | 描述 | 默认日志文件 |
---|---|---|
local0 | BIG-IP 特定消息 | /var/log/ltm |
local1 | EM 特定消息 APM 特定消息 | /var/log/em /var/log/apm |
loacl2 | GTM 和链路控制器特定消息 | /var/log/gtm |
local3 | ASM 特定消息 | /var/log/asm |
loacl4 | ITCM 门户和服务器 (iControl) 特定消息 | /var/log/ltm |
loacl5 | 包过滤特定消息 | /var/log/pktfilter |
loacl6 | HTTPD 特定消息 | /var/log/httpd/httpd_errors |
loacl7 | Linux 特定的引导消息 | /var/log/boot.log |
cron | 与cron进程相关的消息 | /var/log/cron |
daemon | 与系统守护进程相关的消息(包括named和ntpd) | /var/log/daemon.log |
kern | 内核消息 | /var/log/kern.log |
邮件系统消息 | /var/log/maillog | |
auth | 不包含敏感信息的用户身份验证消息 | /var/log/secure |
authpriv | 包含敏感信息的用户身份验证消息 | /var/log/secure |
user | 与用户进程相关的消息 | /var/log/user.log |
<3>.loglevel info 表示设置记录sshd日志的级别,可以理解为日志的详细程度
info 表示日志会报告大部分有用信息,是比较详细的等级
等级 | 描述 | 冗长度 |
---|---|---|
emerg | 紧急系统紧急信息 | 最低限度 |
alert | 需要管理员干预的严重错误 | 低的 |
crit | 严重错误,包括硬件和文件系统故障 | 低的 |
err | 非关键但可能非常重要的错误消息 | 低的 |
warning | 至少应该记录以供审查的警告消息 | 中等的 |
notice | 包含有用但可能会被忽略的消息 | 中等的 |
info | 包含有用但可能会被忽略的消息 | 高的 |
debug | 仅用于故障排除的消息 | 最大值 |
<4>.debug
<5>.INFO
8.实验三 禁止root登录
<1>.vim /etc/ssh/sshd_config 对配置进行如下修改 然后重启服务
<2>.尝试登陆root 失败 权限被拒绝,请重试
<3>.尝试登陆普通用户 成功
9.实验四 配置长时间无人操作自动断开
<1>. vim /etc/ssh/sshd_config 然后重启 这个选项决定了我们在使用ssh连接 登录的时间![](https://i-blog.csdnimg.cn/blog_migrate/a897cae706d1c7927c1f2ea77a8f65b6.png)
<2>. /etc/profile export TMOUT=10 使配置文件生效 source /etc/profile![](https://i-blog.csdnimg.cn/blog_migrate/bc4c810b9e7b0df89d221abc7c28e686.png)
10.实验五 开启空口令登录
<1>. vim /etc/ssh/sshd_config
<2>. 使用空口令登录必须开启密码验证 重启
<3>. 创建新用户 useradd user111 清除密码 passwd -d user111
11.实验六 调试访问速度
<1>. vim /etc/ssh/sshd_config
<2>. 关闭GSSAP认证
<3>. 关闭DNS认证
<4>. 重启
12.实验七 启用密码策略
<1>.vim /etc/login.defs ![](https://i-blog.csdnimg.cn/blog_migrate/68aae9f0d29274d88b3d7261f4cc1143.png)
<2>.常见指令
PASS_MAX_DAYS 密码过期时间 (默认天)
PASS_MIN_DAYS 修改密码最小间隔时间
PASS_MIN_LEN 密码最短长度
PASS_WARN_AGE 密码过期的前一天内通知用户
/etc/security/pwquality.conf
minlen = 9 用户密码的最小长度
minclass= 定义密码必须满足同时有几种字符 大小写字母 数字 符号
maxrepeat = 定义密码中允许几个连续相同的字符
maxclassrepeat 定义用户密码连续字符的最大数目
lcredit 定义用户的密码中必须包含多少小写字母
ucredit 定义用户密码中必须包含多少大写字母
dcredit 定义用户密码中必须包含多少数字
ocredit 定义用户密码中必须包含多少特殊字符
<3>.SSH日志
日志位置:/var/log/secure
代表空密码登录成功 用户 ip 端口
代表断开连接
密码错误
使用密码登录成功