SSH 是我们经常要和远程服务器交互使用的工具。
下面是一些实践中总结的 SSH 操作经验:
一、 如何选择 SSH key 的加密算法?
从安全性和性能上综合考虑,我们建议:
1. 如果 ssh 支持
代码: 全选
ed25519
代码: 全选
ed25519
代码: 全选
rsa
代码: 全选
4096
通过
代码: 全选
ssh-keygen
根据上面的建议,我们推荐你选第一个命令。
如果不支持
代码: 全选
ed25519
代码: 全选
ssh-keygen -t ed25519 -C "user@example.com"
ssh-keygen -t rsa -b 4096 -C "user@example.com"
ssh-keygen -t ecdsa -b 521 -C "user@example.com"
ssh-keygen -t dsa -C "user@example.com"
1. 如果想要便利操作,不设置密钥密码,直接跳过。
2. 如果想要更安全,建议设置密钥密码。
三、如何在本地电脑免密码使用 SSH
在上面创建 SSH key 的时候,如果设置了密码。
那么,以后每次在电脑上使用 SSH 论证的时候,都会提示你输入秘钥密码,非常麻烦。
如果本地电脑安全的话,建议让电脑系统保存 SSH 秘钥密码,避免频繁输入密码。
在
代码: 全选
~/.ssh
代码: 全选
config
代码: 全选
Host *
UseKeychain yes
AddKeysToAgent yes
使用以下命令(
代码: 全选
ssh-copy-id
以后就可以通过 ssh 公钥密钥来认证登录远程服务器了。
代码: 全选
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@127.0.0.1
ssh-copy-id -i ~/.ssh/id_rsa.pub root@127.0.0.1
ssh-copy-id -i ~/.ssh/id_ecdsa.pub root@127.0.0.1
ssh-copy-id -i ~/.ssh/id_dsa.pub root@127.0.0.1
其中,
代码: 全选
root@127.0.0.1
这条命令的作用就是:
将本地 SSH 客户端的公钥,拷贝到远程服务器的
代码: 全选
~/.ssh/authorized_keys
五、修改 SSH 的默认端口
SSH 的默认端口 22,很容易被攻击。
建议将该端口修改为0~65535的非常规端口,比如:3576
编辑 SSH 服务端配置文件:
代码: 全选
Port 3576
如果服务器启用了 SELinux,则还需进行额外配置。
首先,确认 SELinux 是否启用:
代码: 全选
sestatus 2> /dev/null | grep -E -q 'SELinux status:\s+enabled' && echo yes || echo no
代码: 全选
semanage port -a -t ssh_port_t -p tcp 3576
代码: 全选
3576
如果服务器启用了防火墙firewalld,则还需进行额外配置。
首先,确认 firewalld 是否启用:
代码: 全选
systemctl status firewalld
代码: 全选
Active: active (running)
代码: 全选
firewall-cmd --permanent --zone=public --add-port=3576/tcp
firewall-cmd --reload
测试一下,设置是否正确:
代码: 全选
sshd -t
代码: 全选
WARNING: 'UsePAM no' is not supported in Fedora and may cause several problems.
重启 sshd 服务
代码: 全选
systemctl restart sshd
代码: 全选
RSAAuthentication yes #是否允许RSA验证
PubkeyAuthentication yes #是否允许公钥验证
AuthorizedKeysFile .ssh/authorized_keys #公钥文件存放的位置
代码: 全选
ChallengeResponseAuthentication no #设置是否允许使用提示应答式认证。sshd支持login.conf文件中定义的所有认证类型
PasswordAuthentication no #设置是否需要口令验证,默认为yes
PermitEmptyPasswords no #设置是否允许用空口令登录
UsePAM yes #是否启用PAM插件式认证模块,默认为yes
代码: 全选
UsePAM no
WARNING: 'UsePAM no' is not supported in Fedora and may cause several problems.
八、允许/禁止 Root 用户通过 SSH 登录系统
根据实际情况来设置是否允许 root 用户通过 SSH 登录系统。
代码: 全选
PermitRootLogin yes #如果为yes则允许root用户使用ssh登录,为no则表示不允许root进行ssh登录,为without-password则表示禁止 root 账户通过密码登入,但仍可以通过公私钥对登入。
[h3]9.1 只允许指定用户进行登录(白名单):[/h3]
代码: 全选
AllowUsers aliyun test@192.168.1.1 # 允许 aliyun 和从 192.168.1.1 登录的 test 帐户通过 SSH 登录系统。
代码: 全选
DenyUsers d4rksec aliyun #Linux系统账户 # 拒绝 d4rksec、aliyun 帐户通过 SSH 登录系统
十、 其他优化和安全配置
代码: 全选
LoginGraceTime 120 #设置如果用户不能成功登录,sshd将会在这个配置参数指定的时间过后断开连接(单位为秒)
MaxAuthTries 6 #指定每个连接最大允许的认证次数。默认值是6.如果失败认证的次数超过这个数值的一半,连接将被强制断开。且会生成额外的失败日志消息。
MaxSessions 10 #指定每个网络连接允许打开会话的最大数目。默认值为10
StrictModes yes #设置sshd在接受登录请求前是否检查用户的主目录以及rhosts文件的权限和所有者等信息。防止目录和文件设成任何人都有写权限
代码: 全选
/etc/ssh/sshd_config
十一、限制来自指定 IP 通过SSH 方式的用户登录
[h3]11.1 允许指定 IP 或者 IP 范围的用户进行登录(白名单):[/h3]
编辑配置文件:
代码: 全选
vi /etc/hosts.allow
代码: 全选
sshd:192.168.0.1:allow #允许 192.168.0.1 这个 IP 地址 ssh 登录
sshd:192.168.0.1/24:allow #允许 192.168.0.1/24 这段 IP 地址的用户登录
sshd:ALL # 允许全部的 ssh 登录
编辑配置文件:
代码: 全选
vi /etc/hosts.deny
代码: 全选
sshd:192.168.0.1:deny #禁止 192.168.0.1 这个 IP 地址 ssh 登录
sshd:192.168.0.1/24:deny #禁止 192.168.0.1/24 这段 IP 地址的用户登录
sshd:ALL # 禁止全部的 ssh 登录
十二、 通过Fail2Ban 和 iptables 配置,防止服务器被恶意扫描
本文不展开,请阅读下面的参考文档,进一步了解相关内容。
十三、参考文档
1. 選擇 SSH key 的加密演算法
1. Linux 中提高的 SSH 的安全性
1. SSH 安全加固的一些措施
1. SSH 安全加固
1. 安全运维那些事之SSH
1. ssh安全加固
1. SSH登陆失败的日志查看与攻击预防
1. CentOS7下安装和使用Fail2ban
1. Linux实例如何限制指定用户或IP地址通过SSH登录
1. Top 20 OpenSSH Server Best Security Practices
1. fail2ban的使用以及防暴力破解与邮件预警
1. Fail2Ban 高级配置 保护 Nginx 服务
如果你有任何疑问,请通过以下方式联系我们:
微信:
微信群:
加上面的微信,备注微信群
QQ: 3217680847
QQ 群: 82695646