SSH 操作实践指南

Web、Mail、Ftp、DNS、Proxy、VPN、Samba、LDAP 等基础网络服务
回复
头像
yang_hui1986527
帖子: 911
注册时间: 2006-03-04 23:10
来自: 江西高安
联系:

SSH 操作实践指南

#1

帖子 yang_hui1986527 » 2020-06-03 13:18

本文最先发布在:https://www.itcoder.tech/posts/ssh-practice/


SSH 是我们经常要和远程服务器交互使用的工具。

下面是一些实践中总结的 SSH 操作经验:

一、 如何选择 SSH key 的加密算法?

从安全性和性能上综合考虑,我们建议:

1. 如果 ssh 支持

代码: 全选

ed25519
,则使用

代码: 全选

ed25519
2. 否则,建议使用

代码: 全选

rsa
, 位数选择

代码: 全选

4096
二、 如何生成 SSH key?

通过

代码: 全选

ssh-keygen
工具生成 SSH key。

根据上面的建议,我们推荐你选第一个命令。

如果不支持

代码: 全选

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"
关于密钥密码(passphrase):
1. 如果想要便利操作,不设置密钥密码,直接跳过。
2. 如果想要更安全,建议设置密钥密码。

三、如何在本地电脑免密码使用 SSH

在上面创建 SSH key 的时候,如果设置了密码。

那么,以后每次在电脑上使用 SSH 论证的时候,都会提示你输入秘钥密码,非常麻烦。

如果本地电脑安全的话,建议让电脑系统保存 SSH 秘钥密码,避免频繁输入密码。

代码: 全选

~/.ssh
目录下创建

代码: 全选

config
文件,内容如下:

代码: 全选

Host *
    UseKeychain yes
    AddKeysToAgent yes
四、拷贝 SSH 公钥到远程服务器

使用以下命令(

代码: 全选

ssh-copy-id
)将 ssh 公钥 拷贝到远程服务器。

以后就可以通过 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
请根据 SSH key 加密算法类型,具体选择其中一条命令。
其中,

代码: 全选

root@127.0.0.1
是远程服务器的公网 IP 地址和登录用户名,请根据实际情况修改。

这条命令的作用就是:
将本地 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
输出 yes 即表示启用了 SELinux,那么就需要再对 SELinux 进行配置:

代码: 全选

semanage port -a -t ssh_port_t -p tcp 3576
请注意把

代码: 全选

3576
替换为实际配置的端口。

如果服务器启用了防火墙firewalld,则还需进行额外配置。

首先,确认 firewalld 是否启用:

代码: 全选

systemctl status firewalld 
输出日志中含有

代码: 全选

Active: active (running)
字样,那么还需要对firewalld进行配置:

代码: 全选

firewall-cmd --permanent --zone=public --add-port=3576/tcp
firewall-cmd --reload
(后面对于 SSH 服务端配置文件的修改,最好也需要测试,并重启一下 sshd,保证修改生效。)

测试一下,设置是否正确:

代码: 全选

sshd -t

代码: 全选

WARNING: 'UsePAM no' is not supported in Fedora and may cause several problems.
根据提示修正错误和警告,直到测试通过。

重启 sshd 服务

代码: 全选

systemctl restart sshd
六、启用 RSA验证,公钥验证

代码: 全选

    RSAAuthentication yes   #是否允许RSA验证
    PubkeyAuthentication yes   #是否允许公钥验证
    AuthorizedKeysFile .ssh/authorized_keys  #公钥文件存放的位置
七、禁止密码安全验证

代码: 全选

    ChallengeResponseAuthentication no   #设置是否允许使用提示应答式认证。sshd支持login.conf文件中定义的所有认证类型
    PasswordAuthentication no   #设置是否需要口令验证,默认为yes
    PermitEmptyPasswords no   #设置是否允许用空口令登录
    UsePAM yes   #是否启用PAM插件式认证模块,默认为yes 
注:在 RHEL 系列(RHEL,Fedora,CentOS 等)中不允许设置

代码: 全选

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 账户通过密码登入,但仍可以通过公私钥对登入。
九、限制通过 SSH 方式的用户登录

[h3]9.1 只允许指定用户进行登录(白名单):[/h3]

代码: 全选

AllowUsers    aliyun test@192.168.1.1   # 允许 aliyun 和从 192.168.1.1 登录的 test 帐户通过 SSH 登录系统。
[h3]9.2 只拒绝指定用户进行登录(黑名单):[/h3]

代码: 全选

DenyUsers    d4rksec aliyun    #Linux系统账户   # 拒绝 d4rksec、aliyun 帐户通过 SSH 登录系统
<!--ad-->

十、 其他优化和安全配置

代码: 全选

    LoginGraceTime 120   #设置如果用户不能成功登录,sshd将会在这个配置参数指定的时间过后断开连接(单位为秒)
    MaxAuthTries 6  #指定每个连接最大允许的认证次数。默认值是6.如果失败认证的次数超过这个数值的一半,连接将被强制断开。且会生成额外的失败日志消息。
    MaxSessions 10  #指定每个网络连接允许打开会话的最大数目。默认值为10
    StrictModes yes   #设置sshd在接受登录请求前是否检查用户的主目录以及rhosts文件的权限和所有者等信息。防止目录和文件设成任何人都有写权限
以上配置编辑SSHD 配置文件,

代码: 全选

/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 登录 
[h3]11.2 禁止指定 IP 或者 IP 范围的用户进行登录(黑名单):[/h3]
编辑配置文件:

代码: 全选

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 登录 
注:同时设置上述两个文件时,hosts.allow文件中规则的优先级更高。

十二、 通过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
图片
微信:sn0wdr1am86
QQ: 3217680847
QQ 群:82695646
网站:https://www.itcoder.tech/
网站:http://www.snowdream.tech/
回复