介绍
SSH(Secure Shell)是一种用于在计算机网络上进行安全远程访问和执行命令的协议。提供加密通信通道,防止敏感信息在传输过程中被窃听或篡改。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配置步骤:
步骤1:检查 SSH 安装信息
首先,计算机上已经安装了SSH客户端。在大多数操作系统上,SSH 已经默认安装。
检查 SSH 版本信息:
ssh -V
步骤2:生成SSH密钥
-
打开终端(Linux和macOS)
-
生成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 密钥添加到远程服务器
-
运行以下命令将 SSH 公钥添加到远程服务器上的
authorized_keys
文件:ssh-copy-id username@remote_host
或者,如果您的系统不支持
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配置项的解释:
-
Port
: 指定 SSH 服务器监听的端口。默认是22。可以更改以提高安全性。Port 2222
-
Protocol
: SSH 使用的协议版本。一般是2。如果指定"2,1",则服务器将首先尝试使用SSH协议版本2,如果失败,则回退到版本1。Protocol 2
-
PermitRootLogin
: 是否允许 Root 用户通过SSH登录。建议设置为prohibit-password
(默认)或without-password
以使用密钥身份验证。PermitRootLogin prohibit-password
-
PasswordAuthentication
: 是否允许使用密码进行身份验证。建议设置为no
并使用密钥身份验证。PasswordAuthentication no
-
AllowUsers
/AllowGroups
: 允许连接的用户或用户组。只有配置的用户或用户组才能通过SSH连接到服务器。AllowUsers alice bob
-
DenyUsers
/DenyGroups
: 禁止连接的用户或用户组。配置的用户或用户组将无法通过SSH连接到服务器。DenyUsers mallory
-
PubkeyAuthentication
: 是否启用公钥身份验证。默认为yes
。PubkeyAuthentication yes
-
ChallengeResponseAuthentication
: 是否启用响应身份验证。默认为yes
。ChallengeResponseAuthentication no
-
UsePAM
: 是否使用Pluggable Authentication Modules(PAM)进行身份验证。默认设置为yes
。UsePAM yes
-
X11Forwarding
: 是否允许X11转发。如果不需要图形界面,则设置为no
。X11Forwarding no
-
MaxAuthTries
: 参数定义尝试进行身份验证的最大次数。如果达到此次数之后仍未成功登录,连接将被断开。默认值通常是6。
MaxAuthTries 3
在上面的配置中,最多允许3次身份验证尝试。超过这个次数后,将禁止进一步尝试。在SSH配置中,可以通过设置登录失败次数参数来增加安全性,以限制暴力破解尝试。
LoginGraceTime
: 参数定义从用户连接建立到完成身份验证的时间。在时间内,用户需要成功完成身份验证,否则连接将被断开。默认值通常是120秒(2分钟)。
LoginGraceTime 60
在上面配置中,用户需要在60秒内成功完成身份验证,否则连接将被断开。
以上是一些常见的SSH配置项,可以根据需要进行修改。
测试演示
以下是我测试服务器 OpenSSH 配置文件(sshd_config
)的示例,因为没有外网连接且为本地私网测试配置相对宽松,其中一些配置项如下:
-
PermitRootLogin
: 是否允许Root用户通过SSH登录。在配置中,设置为yes
允许 Root 登录。 -
PasswordAuthentication
: 是否允许使用密码进行身份验证。在配置中,设置为yes
,允许密码身份验证。可以将其设置为no
以强制使用密钥身份验证。 -
ChallengeResponseAuthentication
: 是否启用响应身份验证。在配置中,设置为no
。 -
UsePAM
: 是否启用Pluggable Authentication Modules(PAM)进行身份验证。在配置中,设置为yes
。 -
GSSAPIAuthentication
: 是否启用GSSAPI身份验证。在配置中,设置为yes
。 -
X11Forwarding
: 是否允许X11转发。在配置中,设置为yes
。 -
PrintMotd
: 是否显示/etc/motd
文件的消息。在配置中,设置为no
表示不显示/etc/motd
消息。 -
Subsystem
: 指定在连接时启动的子系统。在配置中,sftp
子系统指定用于SFTP的路径。
这些都是配置文件中一些常见选项的示例。
风险
尽管SSH是一个强大的安全协议,但仍然存在一些潜在的风险和攻击手段。
-
暴力破解密码: 攻击者尝试通过不断尝试密码进行暴力破解SSH连接。
-
中间人攻击: 攻击者尝试在用户和远程服务器之间插入以窃听或篡改传输的数据。SSH 加密通信可以减轻这种风险。
-
弱加密算法: 使用弱加密算法使 SSH 连接更易于被攻击。因此,需要使用安全的加密算法。
-
密钥管理不当: SSH 密钥导致安全漏洞,密钥安全存储以及及时禁用或更换失效的密钥。
暴力破解手段:
-
字典攻击: 攻击者事先准备密码字典尝试登录。防范措施包括使用强密码和设置登录失败的锁定机制。
-
暴力破解工具: 攻击者使用专门的暴力破解工具,不断尝试各种组合的用户名和密码。可以使用防暴力破解工具、限制登录尝试次数和设置登录延迟等方式减缓此类攻击。
-
中间人攻击: 攻击者尝试通过欺骗用户或篡改DNS等手段,使其连接到恶意服务器。使用 SSH 的公钥身份验证可以减轻中间人攻击的风险。
-
僵尸网络攻击: 攻击者利用大规模的僵尸网络(botnet)进行协同暴力破解尝试。监控登录日志和强制访问控制列表(ACL)等方法可以帮助防范这种攻击。
为了提高SSH连接的安全性,建议采取以下一些建议性措施:
- 使用公钥身份验证,尽量避免使用密码登录。
- 设置账户锁定机制,限制登录尝试次数。
- 使用多因素身份验证,提高身份验证的安全性。
- 定期审查登录日志,及时发现异常活动。
- 更新SSH软件和操作系统,确保及时应用安全补丁。
综合使用这全措施,以减少SSH连接面临的潜在风险。
Ending