SSH 服务端常用配置解析
SSH 命令是 OpenSSH 套件中的客户端连接工具,可以给予 SSH 加密协议实现安全的远程登录服务器。
SSH 工具是最常用的连接服务器的方式之一,提供了客户端和服务器之间的安全通道。合理的 SSH 配置可以提供方便的登录方式,还可以有效的保护服务器不被轻易的入侵。
本文介绍了几个最常用的配置项,希望可以帮助读者快速掌握 SSH 服务端配置方法,本文所有的示例都使用滴滴云服务器(DC2, CentOS7.5系统)完成。
几个常用配置
大多数配置项都在 /etc/ssh/sshd_config
中,每次修改之后需要重启 sshd 才能生效。
- PermitRootLogin:是否允许 root 账号直接登录。如果设置为 no,将无法以 root 身份直接登录。
- PermitEmptyPasswords:是否允许空密码登录。如果设置为 yes 并且登录的用户密码为空,则可以使用这个用户免密码登录。
- PasswordAuthentication:是否允许密码登录。如果设置为 no,所有用户不允许通过密码登录。
- UseDNS:设置为 yes 时,当客户端试图登录 SSH 服务器时,服务器端先根据客户端的IP地址进行 DNS PTR 反向查询出客户端的主机名,然后根据查询出的客户端主机名进行 DNS 正向 A 记录查询,验证与其原始 IP 地址是否一致。多数情况下,设置为 no 可以节约时间。
如何通过 SSHKey登录 SSH 服务器
除了密码,还可以使用 RSA|DSA 加密方式登录 SSH 服务器。需要在客户端生成密钥文件和私钥文件,将 .pub 文件追加到服务器 ~/.ssh/authorized_keys
中,后续的登录就可以省略输入密码的步骤,更方便,更安全。例如:
客户端:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
[root@client dc2-user]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/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:vWpW5NGWtRIEoRtYKjGJayh+7a2J/KFwvZCFfU6JBQE root@10-254-81-22 The key's randomart image is: +---[RSA 2048]----+ | E++. . o+. | | . .o.+ . . . | | . .. o.o . + . | |o o o.o .+o = . | |o. ..+ +So.o . | | . .+.+ o. | | ..+.o.. .. | | + +.+.o. | | +.=.o. | +----[SHA256]-----+ [root@10-254-81-22 dc2-user]# cat /root/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC12ZnxKU3lOFIDcDMCj8Y4wMt/n91xcAr9kYxRi3wM5u5vocEuhjSSSoOEShBRYLEnqy624ensBEeDFSUuoVZxo51wJlxNLOIeH88wdJ6vwvy+d0usP6FqmAgWxKWOSQC8JQ1vE2cwF/vUsX8dnDVmiKCeLQI7jZQwoW+U01/CBS5WQT60BxJIRdigUbR16x1sg5chFqD245W0/Pwoe2hFAlZ1HQjNYipQ2H9cqV5lkMRM5eD2YckmoLhP1hH3596XUvWPvJal+F9m1O2TIUSk1KyI20VCgeelkOW2pCLiBf5hjfWYfKEQaF/5CQqwi6ZNmaRb8ufuQzgDVAyABeIR root@client |
服务端:
1 2 3 4 |
[root@server ~]# cat ~/.ssh/authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC12ZnxKU3lOFIDcDMCj8Y4wMt/n91xcAr9kYxRi3wM5u5vocEuhjSSSoOEShBRYLEnqy624ensBEeDFSUuoVZxo51wJlxNLOIeH88wdJ6vwvy+d0usP6FqmAgWxKWOSQC8JQ1vE2cwF/vUsX8dnDVmiKCeLQI7jZQwoW+U01/CBS5WQT60BxJIRdigUbR16x1sg5chFqD245W0/Pwoe2hFAlZ1HQjNYipQ2H9cqV5lkMRM5eD2YckmoLhP1hH3596XUvWPvJal+F9m1O2TIUSk1KyI20VCgeelkOW2pCLiBf5hjfWYfKEQaF/5CQqwi6ZNmaRb8ufuQzgDVAyABeIR root@client [root@10-254-77-199 ~]# |
在客户端登录服务端:
1 2 3 4 |
[root@client dc2-user]# ssh server Last login: Thu Feb 21 21:04:59 2019 from client [root@client ~]# |
连接超时设置
- ClientAliveInterval:SSH 服务向 Client 发送探活信息的时间间隔,
- ClientAliveCountMax:SSH 服务想 Client 发送探活信息,没有收到回应次数的最大值。
假设设置为:
- ClientAliveInterval:60
- ClientAliveCountMax:2
每隔 60 秒,服务端将向客户端发送探活信息,如果连续两次没有收到回应,服务端断开 SSH 连接。这两个配置还依赖 SSH 客户端的配置,需要综合使用。
- TCPKeepAlive:TCP 层是否保持连接
登录提示
Banner/match,设置登录提示,例如:
1 2 3 4 5 6 7 8 |
[root@server dc2-user]# cat /etc/Banner_echo Please login as the user dc2-user! [root@server dc2-user]# 在/etc/ssh/sshd_config中加入: Banner /etc/Banner_echo Match User dc2-user Banner none |
当以 dc2-user 以外的身份(例如 root)登录的时候,会看到提示:
1 2 3 4 |
[root@client dc2-user]# ssh root@server Please login as the user dc2-user! root@server's password: |
本文作者:姚旭