linux之ssh服务
SSH服务
- ssh是什么
- ssh配置项
- 配置免密登录
- 优化ssh
ssh是什么
SSH 为 Secure Shell 的缩写,是建立在应用层基础上的安全协议。SSH是较为可靠的专为远程登录会话和其他网络服务提供安全性的协议。利用用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
ssh安装
yum -y install openssh openssh-clients openssh-server openssh-askpass
#服务的状态/停止/启动
[root@web01 ~]# systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2024-12-07 16:31:49 CST; 15min ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 964 (sshd)
Tasks: 1
Memory: 4.2M
CGroup: /system.slice/sshd.service
└─964 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
systemctl stop sshd # 停止
systemctl start sshd # 启动
ssh两种登录流程
ssh服务主要有两种登录方式:第一种为密码口令登录,第二种为公钥登录。
# ssh密码登录流程
1. 客户端连接上服务器之后,服务器把自己的公钥传给客户端
2. 客户端输入服务器密码通过公钥加密之后传给服务器
3. 服务器根据自己的私钥解密登录密码,如果正确那么就让客户端登录
# ssh公钥登录流程
1. 客户端生成RSA公钥和私钥
2. 客户端将自己的公钥存放到服务器
3. 客户端请求连接服务器,服务器将一个随机字符串发送给客户端
4. 客户端根据自己的私钥加密这个随机字符串之后再发送给服务器
5. 服务器接受到加密后的字符串之后用公钥解密,如果正确就让客户端登录,否则拒绝。这样就不用使用密码了。
ssh配置免密登录
# 客户端使用ssh-keygen 生成公私钥 默认加密方式rsa 可以使用-t 指定加密方式
# -t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa | sm2
[root@web01 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #输入私钥的保持位置,默认/root/.ssh/id_rsa
Enter passphrase (empty for no passphrase): #二次加密
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa #私钥保存位置
Your public key has been saved in /root/.ssh/id_rsa.pub #公钥保存位置
The key fingerprint is:
SHA256:c8XAazcCxBnNzYzq+nCtcW/GYaQ6GqUr2BY25goehCQ root@web01
The key's randomart image is:
+---[RSA 3072]----+
| oo*.= |
| + =o+ |
|E. o .o |
|+ . +.+ |
|.. .S..= . |
|. = o.+. o |
|.. * o+.o.oo . |
|..o = .=o+ .+ |
| ..o .ooo. o. |
+----[SHA256]-----+
# 公钥私钥目录权限
# 客户端
[root@web01 ~]# ll / -d
dr-xr-xr-x. 22 root root 288 Dec 4 21:59 / # 根目录权限为555
[root@web01 ~]# ll /root/ -d
dr-xr-x--- 4 root root 221 Dec 7 16:47 /root/ # root目录权限为550
[root@web01 ~]# ll /root/.ssh/ -d
drwx------ 2 root root 57 Dec 7 16:56 /root/.ssh/ # .ssh目录权限为700
[root@web01 ~]# ll /root/.ssh/id_rsa
-rw------- 1 root root 2590 Dec 7 16:56 /root/.ssh/id_rsa #私钥文件权限为600
[root@web01 ~]# ll /root/.ssh/id_rsa.pub
-rw-r--r-- 1 root root 564 Dec 7 16:56 /root/.ssh/id_rsa.pub #公钥文件权限为644
# ssh-copy-id 命令把公钥拷贝到目标服务器
[root@web01 ~]# ssh-copy-id root@172.16.1.41
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" #默认公钥拷贝位置
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
Authorized users only. All activities may be monitored and reported.
root@172.16.1.41's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@172.16.1.41'"
and check to make sure that only the key(s) you wanted were added.
#服务端 文件权限
[root@backup ~]# ll /root/.ssh/
total 4
-rw------- 1 root root 564 Dec 7 17:08 authorized_keys #公钥权限为600
[root@backup ~]# cat /root/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDVTZDyTh7y11RJuf8d8umjn9LhlpVvSVrC0SYjpK1o/rqFBlSDpbMIeD3QaLUzeIcpma49QAOp0oEMg0AUTu7Mkj0teuvCwWAaV7Tw30dHWv7HMh+RccvRqvFJhvaN8cBMJUZepP5ZwEvi+8yd8gFoMqlNfkkmgD6yW0aYaoqwsfPdaLIpim7bUlItw5MoqFYoE3UIOYHc1zXVCQymIbXbJed7q/Vv93si8k6Ch5cgbaKXm7J23IxTEqKgzlGRvhVYDOw9UbL26pJpY+6zNbnp0ctbwbvACNEcaEF+Y3ojhE3RyAt0KK4pJkJfFuPKrfhDzco45YNTam6JBYyMzcESqWK/bUGgxUuvb+13Qk901+Gb6ZlWrChmmRSRd2Y0zllNyVFQaK0pGzrMM9Sqz+I6r22S6byEnVHKhpEAH0gpuvcgw0IbLZ5ifH3GSb8Q8X0WVu5WrYlLOaMM11oywTiYBkqO7Np149h2rbkR2mjQ1AGX928m5ySMOqX+q9PAJW8= root@web01
优化sshd_config
SSH 依次进行的认证方法的是 publickey, gssapi-keyex, gssapi-with-mic, password。 用户 password 认证方式,但前面 3 个认证过程系统还是会尝试,这就浪费时间了,也就造成 SSH 登录慢。GSSAPI 主要是基于 Kerberos 的,因此要解决这个问题也就变成要系统配置有 Kerberos, 一般用户是没有配置 Kerberos的,所以修改GSSAPIAuthentication为no,UseDNS 为 no,可加速ssh密码登录认证。
[root@web01 ~]# cat /etc/ssh/sshd_config | grep -Ev "^$|^#"
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
# SyslogFacility AUTHPRIV 表示当有人使用ssh登录系统时,ssh会记录信息,记录类型为AUTHPRIV
# AUTHPRIV 表达了日志记录的是包含敏感信息的用户身份验证消息,默认存储于/var/log/secure
# AUTH 则表达了日志记录的是不包含敏感信息的用户身份验证消息,同样默认存储于/var/log/secure
SyslogFacility AUTH
PermitRootLogin yes #是否允许root用户登录
AuthorizedKeysFile .ssh/authorized_keys #公钥认证文件
PasswordAuthentication yes #密码认证,配置了公私钥认证,可关闭此项
ChallengeResponseAuthentication no
GSSAPIAuthentication yes #关闭GSSAPI认证 可优化改为no UseDNS no 关闭dns解析
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding no
PrintMotd no
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem sftp /usr/libexec/openssh/sftp-server -l INFO -f AUTH
Protocol 2
LogLevel VERBOSE ##LogLevel VERBOSE表示设置记录sshd日志信息的级别8
PubkeyAuthentication yes #开启公钥认证
RSAAuthentication yes #rsa认证
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no #是否允许空密码登录 危险
PermitUserEnvironment no
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com
ClientAliveCountMax 0
Banner /etc/issue.net
MACs hmac-sha2-512,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha2-256-etm@openssh.com
StrictModes yes
AllowTcpForwarding no
AllowAgentForwarding no
GatewayPorts no
PermitTunnel no
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
#修改默认端口
Port 22
配置ssh长时间无人操作自动断开
LoginGraceTime 2m #多长时间内没有登录成功,将会自动断开连接,单位即秒 登录宽限期
[root@backup ~]# tail -1 /etc/profile #在命令行10秒内无任何操作,会自动断开
#export TMOUT=10
#MaxAuthTries 6 #登录认证失败次数 自动断开
配置密码策略
# /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
minlen = 8 #密码长度为8个字符
minclass = 4 #密码要包含四种类型,大小写、数字、特殊符号
maxrepeat = 2 #限制单个字符最大重复次数 ,aabb1122
maxclassrepeat = 2 #限制类型重复AaBb
lcredi = 1 #至少1个小写字母
ucredit = 1 #至少1个大写字母
dcredit = 1 #至少1个数字
ocredit = 1 #至少1个特殊符号
ssh日志
# ssh服务的日志存储于/var/log/secure
Failed password 为密码错误
Accept password 为登录成功
disconnected by user 为断开链接
ssh常用参数
# ssh -v 10.0.0.41 -p 22 测试目标41主机的22端口详细连接信息
# ssh -p 指定端口
# ssh -i /path/to/private_key user@hostname 指定私钥连接目标主机
# ssh -C user@hostname 启用压缩连接,有效提升网络连接传输速度
# ssh -l root 指定用户名
ssh加固
利用防火墙进行访问限制。
利用单点登录系统进行登录管理。
利用堡垒机进行管控。
对ssh服务日志进行监控、分析和审计。
Never try,never know