SSH 解析 | 关键参数 | 安全配置

介绍

SSH(Secure Shell)是一种用于在计算机网络上进行安全远程访问和执行命令的协议。提供加密通信通道,防止敏感信息在传输过程中被窃听或篡改。SSH还支持文件传输和端口转发等功能,使其成为广泛使用的安全远程管理工具。

SSH 解析 | 关键参数 | 安全配置

1. 安全远程访问
SSH 允许用户通过网络安全地远程登录到其他计算机。用户可以在远程系统上执行命令、访问文件、管理服务等。

2. 加密通信:
SSH 传输的数据都经过加密,使用的加密算法通常包括对称加密(如AES)和非对称加密(如RSA)。

3. 多种身份验证方法:
SSH 支持多种身份验证方法,包括密码、公钥、证书等。可以选择最适合其需求的身份验证方式,并提高系统的安全性。

4. 文件传输:
SSH 支持安全的文件传输协议(SFTP),允许用户在本地计算机和远程计算机之间传输文件。用于FTP等传统文件传输协议,是FTP安全衍生品,。

5. 端口转发:
SSH 允许用户设置本地端口转发。

6. 配置文件:
SSH 服务器和客户端都有配置文件,用于定制各种参数和行为。可以根据需求进行精确的配置。

7. 公钥和私钥:
SSH 使用公钥加密技术,其中有一个私钥保存在本地,而公钥存储在远程服务器上。允许身份验证,同时不需要在网络上传输密码。

8. 端口号:
SSH 默认使用22号端口,可以通过配置更改。提高系统的安全性,因为恶意用户扫描的是标准端口。

9. 兼容性:
SSH 是一个开放标准,并得到广泛采用。主流操作系统和网络设备都支持 SSH,使其成为跨平台远程访问的标准。

SSH 是一种关键的网络协议,用于保护远程通信和管理。安全性、灵活性和广泛支持使其成为网络管理员和开发人员的首选工具。

SSH 解析 | 关键参数 | 安全配置

配置

SSH 配置时,涉及到在计算机上设置 SSH 密钥,以便通过SSH协议安全访问其他计算机。

基本的SSH配置步骤:

ssh -V

步骤1:检查 SSH 安装信息

首先,计算机上已经安装了SSH客户端。在大多数操作系统上,SSH 已经默认安装。
检查 SSH 版本信息:

步骤2:生成SSH密钥

  1. 打开终端(Linux和macOS)
  2. 生成SSH密钥:
    执行命令后,将被要求指定保存密钥的文件位置和设置一个密码(可选)。按照提示操作即可。
ssh-keygen -t rsa -b 4096 -C "UserName@example.com"
  • -t rsa: 指定密钥类型为RSA。
  • -b 4096: 指定密钥位数为4096位。
  • -C "UserName@example.com"

步骤3:添加 SSH 密钥到 SSH 代理(可选)

如果希望在一个SSH会话中使用密钥,可以将密钥添加到SSH代理。运行以下命令:

ssh-add ~/.ssh/id_rsa

步骤4:将 SSH 密钥添加到远程服务器

  1. 运行以下命令将 SSH 公钥添加到远程服务器上的authorized_keys文件:
ssh-copy-id username@remote_host
  1. 或者,如果您的系统不支持ssh-copy-id,可以手动将公钥内容追加到远程服务器的~/.ssh/authorized_keys 文件中。

步骤5:测试SSH连接

ssh username@remote_host

设置正确,通过SSH连接到远程服务器无需输入密码。

在很多系统上,允许 Root 用户通过 SSH 连接是不推荐的,因为会增加系统的安全风险。推荐的做法是使用普通用户登录,然后通过sudo或su切换到Root用户权限进行必要的管理任务。

Root 连接

步骤1:打开SSH配置文件

使用文本编辑器打开 SSH 服务器的配置文件。/etc/ssh/sshd_config

sudo nano /etc/ssh/sshd_config

步骤2:修改配置文件

在配置文件中找到以下行:

PermitRootLogin prohibit-password

将其改为:

PermitRootLogin yes

允许 Root 用户通过 SSH 连接。

步骤3:保存并退出

保存文件并退出文本编辑器。

步骤4:重启SSH服务

在Ubuntu上,可以运行:

sudo service ssh restart

在 RHEL/CentOS 系统上,可使用systemctl或其他服务管理工具。

sudo systemctl restart ssh

注意:

  • 在允许Root用户SSH登录之前,已经设置强密码。
  • 确保只有受信任的用户可以通过SSH连接到服务器。

SSH 配置项

常见的SSH配置项的解释:

  1. Port 指定 SSH 服务器监听的端口。默认是22。可以更改以提高安全性。
    Port 2222
  2. Protocol SSH 使用的协议版本。一般是2。如果指定"2,1",则服务器将首先尝试使用SSH协议版本2,如果失败,则回退到版本1。
    Protocol 2
  3. PermitRootLogin 是否允许 Root 用户通过SSH登录。建议设置为prohibit-password(默认)或without-password以使用密钥身份验证。
    PermitRootLogin prohibit-password
  4. PasswordAuthentication 是否允许使用密码进行身份验证。建议设置为no并使用密钥身份验证。
    PasswordAuthentication no
  5. AllowUsers / AllowGroups 允许连接的用户或用户组。只有配置的用户或用户组才能通过SSH连接到服务器。
    AllowUsers alice bob
  6. DenyUsers / DenyGroups 禁止连接的用户或用户组。配置的用户或用户组将无法通过SSH连接到服务器。
    DenyUsers mallory
  7. PubkeyAuthentication 是否启用公钥身份验证。默认为yes
    PubkeyAuthentication yes
  8. ChallengeResponseAuthentication 是否启用响应身份验证。默认为yes
    ChallengeResponseAuthentication no
  9. UsePAM 是否使用Pluggable Authentication Modules(PAM)进行身份验证。默认设置为yes
    UsePAM yes
  10. X11Forwarding 是否允许X11转发。如果不需要图形界面,则设置为no。X11Forwarding no
  11. MaxAuthTries 参数定义尝试进行身份验证的最大次数。如果达到此次数之后仍未成功登录,连接将被断开。默认值通常是6。
    MaxAuthTries 3

在上面的配置中,最多允许3次身份验证尝试。超过这个次数后,将禁止进一步尝试。在SSH配置中,可以通过设置登录失败次数参数来增加安全性,以限制暴力破解尝试。

  1. LoginGraceTime 参数定义从用户连接建立到完成身份验证的时间。在时间内,用户需要成功完成身份验证,否则连接将被断开。默认值通常是120秒(2分钟)。

在上面配置中,用户需要在60秒内成功完成身份验证,否则连接将被断开。

以上是一些常见的SSH配置项,可以根据需要进行修改。

测试演示

以下是我测试服务器 OpenSSH 配置文件(sshd_config)的示例,因为没有外网连接且为本地私网测试配置相对宽松,其中一些配置项如下:

SSH 解析 | 关键参数 | 安全配置
  1. PermitRootLogin 是否允许Root用户通过SSH登录。在配置中,设置为yes 允许 Root 登录。
  2. PasswordAuthentication 是否允许使用密码进行身份验证。在配置中,设置为yes,允许密码身份验证。可以将其设置为no以强制使用密钥身份验证。
  3. ChallengeResponseAuthentication 是否启用响应身份验证。在配置中,设置为no
  4. UsePAM 是否启用Pluggable Authentication Modules(PAM)进行身份验证。在配置中,设置为yes
  5. GSSAPIAuthentication 是否启用GSSAPI身份验证。在配置中,设置为yes
  6. X11Forwarding 是否允许X11转发。在配置中,设置为yes
  7. PrintMotd 是否显示/etc/motd文件的消息。在配置中,设置为no表示不显示/etc/motd消息。
  8. Subsystem 指定在连接时启动的子系统。在配置中,sftp子系统指定用于SFTP的路径。

这些都是配置文件中一些常见选项的示例。

风险

尽管SSH是一个强大的安全协议,但仍然存在一些潜在的风险和攻击手段。

  1. 暴力破解密码: 攻击者尝试通过不断尝试密码进行暴力破解SSH连接。
  2. 中间人攻击: 攻击者尝试在用户和远程服务器之间插入以窃听或篡改传输的数据。SSH 加密通信可以减轻这种风险。
  3. 弱加密算法: 使用弱加密算法使 SSH 连接更易于被攻击。因此,需要使用安全的加密算法。
  4. 密钥管理不当: SSH 密钥导致安全漏洞,密钥安全存储以及及时禁用或更换失效的密钥。

暴力破解手段:

  1. 字典攻击: 攻击者事先准备密码字典尝试登录。防范措施包括使用强密码和设置登录失败的锁定机制。
  2. 暴力破解工具: 攻击者使用专门的暴力破解工具,不断尝试各种组合的用户名和密码。可以使用防暴力破解工具、限制登录尝试次数和设置登录延迟等方式减缓此类攻击。
  3. 中间人攻击: 攻击者尝试通过欺骗用户或篡改DNS等手段,使其连接到恶意服务器。使用 SSH 的公钥身份验证可以减轻中间人攻击的风险。
  4. 僵尸网络攻击: 攻击者利用大规模的僵尸网络(botnet)进行协同暴力破解尝试。监控登录日志和强制访问控制列表(ACL)等方法可以帮助防范这种攻击。

为了提高SSH连接的安全性,建议采取以下一些建议性措施:

  • 使用公钥身份验证,尽量避免使用密码登录。
  • 设置账户锁定机制,限制登录尝试次数。
  • 使用多因素身份验证,提高身份验证的安全性。
  • 定期审查登录日志,及时发现异常活动。
  • 更新SSH软件和操作系统,确保及时应用安全补丁。

综合使用这全措施,以减少SSH连接面临的潜在风险。

公号(IT资源共享站)

一个运维学习平台,什么都有,每天进步一点点!

相关新闻

历经多年发展,已成为国内好评如潮的Linux云计算运维、SRE、Devops、网络安全、云原生、Go、Python开发专业人才培训机构!