Secure Shell,简称SSH,是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。虽然任何网络服务都可以通过SSH实现安全传输,SSH最常见的用途是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令。
目前openssh是Linux界主流的开源ssh软件,它包含了服务器端程序sshd和客户端程序ssh, scp等。
1 | pacman -S openssh |
服务器开启sshd服务前,请先做好一些安全性的设置工作。比如:
- 给服务器上的用户帐号设置强密码,密码生成请参阅用命令行生成密码。
sudo passwd -l root
锁定root帐号,禁止其登录系统。- 修改
/etc/ssh/sshd_config
文件中的默认配置,提高sshd服务的安全性。- 修改默认服务端口22为一个较大的端口号,比如54321,将
#Port 22
改为Port 54321
。 - 缩短登录尝试的时间,将
#LoginGraceTime 2m
改为LoginGraceTime 30s
。 - 禁止root帐号远程登录,将
#PermitRootLogin prohibit-password
改为PermitRootLogin no
。 - 设置最大尝试次数,将
#MaxAuthTries 6
改为MaxAuthTries 3
。 - 禁用空密码,将
#PermitEmptyPasswords no
改为PermitEmptyPasswords no
。 - 添加警告语,将
#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! #
###############################################################
- 修改默认服务端口22为一个较大的端口号,比如54321,将
- 安装配置防火墙,如iptables。
- 安装防止暴力破解攻击ssh的程序,如denyhosts或fail2ban。
然后再开启sshd服务sudo systemctl enable --now sshd.service
!
参见ssh使用指南,将公钥上传到服务器后,再次修改/etc/ssh/sshd_config
文件,进一步提高sshd服务的安全性。
- 开启密钥登录,将
#PubkeyAuthentication yes
改为PubkeyAuthentication yes
。 - 禁用密码登录,将
#PasswordAuthentication yes
改为PasswordAuthentication no
。
记得再次确认公钥已就位,然后重启sshd服务sudo systemctl restart sshd.service
。
此时尝试密码方式登录远程主机将看到:
1 | $ ssh root@haoohaoo.com |
另外,可以编辑/etc/motd
的内容,比如一个欢迎条幅,这个文件的内容会在用户成功登录ssh后的终端中显示出来。
1 | __ __ |
再有,可以在sshd_config中加入
1 | ClientAliveInterval 15 |
这样每15秒,最多尝试10次,服务器会主动向客户端请求消息,可以在网络不佳的情形下减少
broken pipeline
问题的发生。