0%

SSH服务器

Secure Shell,简称SSH,是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。虽然任何网络服务都可以通过SSH实现安全传输,SSH最常见的用途是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令。

目前openssh是Linux界主流的开源ssh软件,它包含了服务器端程序sshd和客户端程序ssh, scp等。

1
# pacman -S openssh

服务器开启sshd服务前,请先做好一些安全性的设置工作。比如:

  1. 给服务器上的用户帐号设置强密码,密码生成请参阅用命令行生成密码
  2. sudo passwd -l root锁定root帐号,禁止其登录系统。
  3. 修改/etc/ssh/sshd_config文件中的默认配置,提高sshd服务的安全性。
    1. 修改默认服务端口22为一个较大的端口号,比如54321,将#Port 22改为Port 54321
    2. 缩短登录尝试的时间,将#LoginGraceTime 2m改为LoginGraceTime 30s
    3. 禁止root帐号远程登录,将#PermitRootLogin prohibit-password改为PermitRootLogin no
    4. 设置最大尝试次数,将#MaxAuthTries 6改为MaxAuthTries 3
    5. 禁用空密码,将#PermitEmptyPasswords no改为PermitEmptyPasswords no
    6. 添加警告语,将#Banner none改为Banner /etc/ssh/sshd_banner,并创建/etc/ssh/sshd_banner文件,文件内容示例如下。
      1
      2
      3
      4
      5
      ###############################################################
      # Welcome to My Server #
      # All connections are monitored and recorded! #
      # Disconnect IMMEDIATELY if you are not an authorized user! #
      ###############################################################
  4. 安装配置防火墙,如iptables。
  5. 安装防止暴力破解攻击ssh的程序,如denyhosts或fail2ban

然后再开启sshd服务sudo systemctl enable --now sshd.service

参见ssh使用指南,将公钥上传到服务器后,再次修改/etc/ssh/sshd_config文件,进一步提高sshd服务的安全性。

  1. 开启密钥登录,将#PubkeyAuthentication yes改为PubkeyAuthentication yes
  2. 禁用密码登录,将#PasswordAuthentication yes改为PasswordAuthentication no

记得再次确认公钥已就位,然后重启sshd服务sudo systemctl restart sshd.service

此时尝试密码方式登录远程主机将看到:

1
2
3
4
$ ssh root@haoohaoo.com
root@haoohaoo.com: Permission denied (publickey).
$ ssh guest@haoohaoo.com
guest@haoohaoo.com: Permission denied (publickey).

另外,可以编辑/etc/motd的内容,比如一个欢迎条幅,这个文件的内容会在用户成功登录ssh后的终端中显示出来。

1
2
3
4
5
    __                      __
/ /_ ____ _____ ____ / /_ ____ _____ ____ _________ ____ ___
/ __ \/ __ `/ __ \/ __ \/ __ \/ __ `/ __ \/ __ \ / ___/ __ \/ __ `__ \
/ / / / /_/ / /_/ / /_/ / / / / /_/ / /_/ / /_/ // /__/ /_/ / / / / / /
/_/ /_/\__,_/\____/\____/_/ /_/\__,_/\____/\____(_)___/\____/_/ /_/ /_/

再有,可以在sshd_config中加入

1
2
ClientAliveInterval 15
ClientAliveCountMax 10

这样每15秒,最多尝试10次,服务器会主动向客户端请求消息,可以在网络不佳的情形下减少broken pipeline问题的发生。