Linux服务—openssh—学习笔记
1. 什么是 SSH
SSH
为 Secure Shell 的缩写,是建立在应用层基础上的安全协议。SSH是较为可靠的专为远程登录会话和其他网络服务提供安全性的协议。利用用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
OpenSSH 服务是 SSH 协议的免费开源实现,可以用来进行远程控制, 或在计算机之间传送文件。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控制和文件传输过程中的数据,并由此来代替原来的类似服务。
通过使用SSH,你可以把所有传输的数据进行加密,这样可以较好地抑制"中间人"这种攻击,也可能够防御DNS欺骗和IP欺骗。
使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。
接下来介绍使用其传输文件的命令。
scp
命令:将本机文件复制到远程服务器上(上传)
命令格式:scp 本地路径 用户名@IP:目录
将远程服务器上的文件复制到本机(下载)
命令格式:scp 用户名@IP:文件路径 本地目录
注意:
- 如果远程服务器openssh有特殊限制,scp便要走特殊端口,具体用什么端口视情况而定,命令格式如下:
scp -P 2222 用户名@IP:路径 目录
- 使用scp要注意所使用的用户是否具有可读取远程服务器相应文件的权限
- 如果是拷贝文件夹添加
-r
参数
2. 安装 openssh
openssh默认已经安装于centos中,无须额外的安装。相关的软件包可以通过以下命令进行查询。
dnf list |grep openssh
openssh-clients.x86_64 # 客户端
openssh-server.x86_64 # 服务端
openssh-askpass.x86_64 # 交互式访问
3. 服务的状态/停止/启动
可使用systemctl
命令查看和设置openssh服务的状态。
systemctl status sshd.service # 查看ssh状态
systemctl start sshd.service # 启动ssh服务
systemctl stop sshd.service # 停止ssh服务
systemctl reload sshd.service # 刷新ssh配置文件
systemctl restart sshd.service # 重启ssh服务
systemctl disable sshd.service # 关闭开机自动启动ssh服务
systemctl enable sshd.service # 打开开机自动启动ssh服务
注意:如果服务关闭,则无法远程登录服务器。
4. 配置免密码(公私钥认证)登录
ssh
服务主要有两种登录方式:第一种为密码口令登录,第二种为公钥登录。
linux下可以用用ssh-keygen
命令生成公钥/私钥对。
若有机器A,B。现想A(客户机)通过ssh免密码登录到B(服务器)。 在A机(客户机)下使用ssh-keygen
命令生成公钥/私钥对。在执行此命令后将在/root/.ssh
目录下将生成id_rsa
和id_rsa.pub
文件。
进入/root/.ssh
文件夹内可以看到如下密钥文件
id_rsa # 私钥
id_rsa.pub # 公钥
在B机器(服务器)开启证书的验证,默认是开启的。 若没有开启可修改ssh配置文件,vi /etc/ssh/sshd_config
,将文本中有关PubkeyAuthentication
和AuthorizedKeysFile
的条目修改为如下内容:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
随后重启服务 systemctl restart sshd.service
A机器(客户机)使用ssh-copy-id [user]@[host]
命令拷贝密钥文件到B机器(服务器)。
随后客户机访问服务器,我们会发现直接无密码登录。
而如果我们此时使用另外一台主机登录,我们会发现可以通过密码的方式登录。我们可以修改配置文件中的PasswordAuthentication
值为no
,可以禁止使用密码的方式。
5. openssh 配置文件
登录服务器将配置的公钥删除,以免影响后面实验。
cd .ssh
rm -rf authorized_keys
恢复openssh配置文件,重启服务
vi /etc/ssh/sshd_config
systemctl restart sshd.service
5.1 修改 SSH 默认端口
所需命令:
vi /etc/ssh/sshd_config
Port 2222
systemctl restart sshd.service
ssh [user]@[IP] -p 2222
OpenSSH常用配置文件有两个/etc/ssh/ssh_config
和 /etc/ssh/sshd_config
。
ssh_config
为客户端配置文件。
sshd_config
为服务端配置文件。
vi /etc/ssh/sshd_config
取消注释,并修改端口为2222(ssh默认端口为22)
设置好之后,保存退出,并重启SSH服务。systemctl restart sshd.service
我们通过客户机访问,会发现默认的22端口已经无法访问,需要使用 -p [端口号]
的方式进行访问。 ssh 192.168.0.239 -p 2222
5.2 配置ssh日志
所需命令:
vi /etc/ssh/sshd_config
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
LogLevel DEBUG
systemctl restart sshd.service
tail -f /var/log/secure
vi /etc/ssh/sshd_config
SyslogFacility AUTHPRIV
表示当有人使用ssh登录系统时,ssh会记录信息,记录类型为AUTHPRIV。
#LogLevel INFO
表示设置记录sshd日志信息的级别。
SyslogFacility
一项,规定了服务日志的性质,也规定了服务日志存储的默认路径。ssh配置文件的这一字段一般是不需要修改的。
设置 | 描述 | 默认日志文件 |
---|---|---|
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 |
#LogLevel INFO
表示设置记录sshd日志信息的级别。可以理解为设置了日志的详细程度。
等级 | 描述 | 冗长度 |
---|---|---|
emerg | 紧急系统紧急信息 | 最低限度 |
alert | 需要管理员干预的严重错误 | 低的 |
crit | 严重错误,包括硬件和文件系统故障 | 低的 |
err | 非关键但可能非常重要的错误消息 | 低的 |
warning | 至少应该记录以供审查的警告消息 | 中等的 |
notice | 包含有用但可能会被忽略的消息 | 中等的 |
info | 包含有用但可能会被忽略的消息 | 高的 |
debug | 仅用于故障排除的消息 | 最大值 |
你可以将此条注释取消,将其修改为#LogLevel DEBUG
,重启ssh服务(systemctl restart sshd.service),观察修改前后日志(tail -f /var/log/secure)详细度的变化。
5.3 禁止root登录
所需命令:
vi /etc/ssh/sshd_config
PermitRootLogin no
systemctl restart sshd.service
在Authentication
部分,取消注释PermitRootLogin yes
并修改为 PermitRootLogin no
,这一设置决定了是否允许root用户登录,将yes改为no,则root不能登录 。
PermitRootLogin yes root可以登陆
no root不可以登陆
prohibit-password 可以通过key登陆但禁止密码
但是重启服务后仍然使用密码登陆成功
这是因为需要修改的是另外的文件
之后不要马上重启,先生成key后,拷贝的服务器,防止后面无法连接
之后重启服务后,使用kali远程连接,可以通过密钥直接免密登陆,使用另一台机器再连接服务器,输入正确密码后还是无法连接
也可以修改禁止root登陆后,添加一个新账户并设置密码,再重启ssh服务,在客户机上使用root登录则会提示权限拒绝,而使用普通用户则成功登录
5.4 配置长时间无人操作自动断开ssh链接
所需命令:
vi /etc/ssh/sshd_config
LoginGraceTime 2m
systemctl restart sshd.service
vi /etc/profile
export TMOUT=10
source /etc/profile
#LoginGraceTime 2m
,设置了指定时间内没有成功登录,将会断开连接,若无单位则默认时间为秒。图中默认为2分钟,如需调整可取消注释,调整为自己想要设定的值。
在/etc/profile
这个配置文件的末尾加上
export TMOUT=10 #单位是秒
执行source /etc/profile
命令,使配置文件生效。
可以看到,当命令终端超过10秒无人操作,ssh连接自动断开了。
5.5 开启空口令登录
配置文件/etc/ssh/sshd_config
的PermitEmptyPasswords no
,默认设置禁止空口令登录,将其取消掉#
注释并将no
改为yes
,更改完后记得重启sshd服务使配置文件生效
systemctl restart sshd
注:使用空口令登录须开启密码认证
添加新用户测试
useradd 用户
passwd -d 用户 # 清除用户密码
测试空口令登录成功
5.6 访问速度调优
所需命令:
vi /etc/ssh/sshd_config
GSSAPIAuthentication no # 关闭GSSAPI认证
UseDNS no # 关闭DNS解析
systemctl restart sshd.service
将此两行改为no可解决ssh链接慢的问题
5.7 启用密码策略
启用密码策略有两个配置文件: 第一个是/etc/login.defs
修改文件里的策略:vi /etc/login.defs
PASS_MAX_DAYS 99 # 密码99天过期
PASS_MIN_DAYS 1 # 修改密码最小间隔为1天
PASS_MIN_LEN 8 # 密码最短长度为8
PASS_WARN_AGE 1 # 密码过期前1天内通知用户
第二个配置文件为:/etc/security/pwquality.conf
修改文件里的策略:vi /etc/security/pwquality.conf
# "N" 处应填写数字
minlen=N # 定义用户密码的最小长度;
minclass=N # 定义密码必须满足同时有几种字符;
maxrepeat=N # 定义密码中允许几个连续相同的字符;
maxclassrepeat=N # 定义用户密码连续字符的最大数目;
lcredit=N # 定义用户密码中必须包含多少个小写字母;
ucredit=N # 定义用户密码中必须包含多少个大写字母;1
dcredit=N # 定义用户密码中必须包含多少个数字;1
ocredit=N # 定义用户密码中必须包含多少个特殊字符(除数字、字母之外);其中 = 1表示,至少有一个
配置文件长这样:
密码策略这里修改后,只对新建用户生效。
6. ssh 的日志
ssh服务的日志存储于/var/log/secure
。 tail -f /var/log/secure
大家可以自由定制所想查看的日志,例如模拟登录失败,登录成功等不同方式,以观察日志的不同变化。 状态:
- Failed password 为密码错误
- Accept password 为登录成功
- disconnected by user 为断开链接