Skip to content

sshd

默认情况下大部分发行版并不安装 ssh 服务器,需要我们自己安装通常是 openssh-server 包。它会提供一个 sshd 守护命令,我们可以直接运行他来启动 ssh 服务器,当然更好的方式是通过 systemd 这样的工具来管理 ssh 服务:

Bash
# 启动
systemctl start sshd.service
# 开机启动
systemctl enable sshd.service

debian 中是 ssh.service

SSH 服务器配置

sshd 的配置文件在 /etc/ssh 目录中:

  • /etc/ssh/sshd_config: 配置文件
  • /etc/ssh/ssh_host_ecdsa_key: ECDSA 私钥
  • /etc/ssh/ssh_host_ecdsa_key.pub: ECDSA 公钥

当然还有一些其他的算法生成的公钥和私钥。主要他们都是自动生成的服务器端的公钥和私钥,如果重装 sshd 那么这些密钥会自动重新生成。而sshd_config是 ssh 服务器的主要配置文件。该配置文件中每个命令占据一行,每行都以option value这样的形式组织,通常 sshd 服务启动之后开箱即用,当然最好更改其中的一些参数来达赖安全访问的目的:

  • AllowGroups groupName1 groupName2..:指定允许登陆的用户组
  • AllowUsers userame1 username2..:指定允许登陆的用户名, 还可以是 username@ip 来只允许某个用户从某个 ip 登陆
  • Port 22:指定 sshd 监听的端口,默认就是 22。可用更改此端口来降低系统因网络扫描而带来的受到攻击的危险, 注意则通常还需要在防火墙以及 SELinux 策略中允许该接口
  • PermitRootLogin no:限制 root 用户使用 ssh 登陆,也可以是prohibit-password即不能使用密码登陆 root 用户而强制使用密钥登陆
  • PasswordAuthentication no:即禁用密码登陆,注意在此之前一定要部署好密钥

避免断线的设置,主要是在当客户端长时间不操作时会自动断开,下面的设置可以在每个一段时间像客户端发送一次心跳来保持连接,实际上有些 ssh 客户端也支持从客户端像服务器发送心跳的功能:

  • ClientAliveInterval 60:表示每隔 60s,从服务器向客户端发送一次心跳
  • ClientAliveCountMax 3:表示客户端多少次心跳无响应之后,服务端才会认为客户端已经断开连接,然后断开连接

注意更改后需要重新 systemctl daemon-reload sshd 服务。