- 本文详细介绍了 SSH 服务的基础知识、配置方法、常用命令以及高级用法,帮助你从零开始掌握 SSH 的使用和优化
1. 什么是 SSH 服务?
- SSH 是 Secure Shell(安全壳) 的简称,是一种加密的网络协议。
- 用于在不安全的网络中安全地访问和管理远程计算机。
- 通过公钥和私钥生成密钥对,确保远程登录、操作电脑、传输文件等操作都是加密的。
2. SSH 服务的网络前提条件
- 本地电脑和远程服务器之间网络连通。
- 远程服务器开启 SSH 服务。
- SSH 端口(默认 22)开放。
- 本地电脑安装 SSH 客户端。
- 防火墙和路由器允许 SSH 流量。
- 域名解析正确(如果使用域名) 。
- 拥有有效的登录凭证(密码或 SSH 密钥) 。
- 网络延迟和带宽满足需求。
3. SSH 提供的登录方式
- 密码登录:简单易用,安全性较低。
- 公钥登录:安全性高,适合自动化。
- 基于主机的身份验证:适用于信任的主机。
- 键盘交互式身份验证:适合多因素认证。
- GSSAPI 身份验证:适合企业环境。
- 证书登录:适合大规模环境。
- 多因素认证(MFA) :安全性极高。
4. SSH 公钥认证的正确流程
4.1 生成密钥对
-
在本地生成 SSH 密钥对:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -P "" -q-t:指定密钥类型(如rsa、ed25519)。-b:指定密钥长度(如4096位)。-f:指定密钥文件路径。-P:设置密钥密码。-q:静默模式。
4.2 复制公钥到远程服务器
-
使用
ssh-copy-id将公钥复制到远程服务器:ssh-copy-id root@node2- 公钥会被追加到远程服务器的
~/.ssh/authorized_keys文件中。
- 公钥会被追加到远程服务器的
4.3 公钥认证过程
- 远程服务器生成随机字符串,用公钥加密后发送给客户端。
- 客户端用私钥解密并返回结果。
- 远程服务器验证结果,决定是否允许登录。
5. Linux 中常用的 SSH 服务命令
5.1 安装 SSH 服务
dnf install -y openssh-server openssh-clients
openssh-server:SSH 服务端。openssh-clients:SSH 客户端。
5.2 查看 SSH 版本
ssh -V
5.3 检查 SSH 服务状态
systemctl status sshd
5.4 启动、停止、重启 SSH 服务
systemctl start sshd
systemctl stop sshd
systemctl restart sshd
5.5 设置 SSH 服务开机自启
systemctl enable sshd
5.6 重新加载 SSH 服务配置
systemctl reload sshd
6. SSH 配置文件详解
-
路径:
/etc/ssh/sshd_config -
关键配置项:
Port:指定 SSH 服务端口(默认22)。PermitRootLogin:控制是否允许 root 用户登录。PasswordAuthentication:控制是否允许密码认证。ChallengeResponseAuthentication:控制是否启用挑战-响应认证。AllowUsers和DenyUsers:限制允许或拒绝登录的用户。
配置文件示例
Port 2222
PermitRootLogin no
PasswordAuthentication no
ChallengeResponseAuthentication no
AllowUsers alice bob@192.168.1.100
DenyUsers eve
7. 在 Ubuntu 中使用 SSH 服务
- 默认情况下,Ubuntu 禁止 root 用户通过 SSH 远程登录。
- 可以通过修改
/etc/ssh/sshd_config中的PermitRootLogin配置项,允许 root 用户登录。 - 为了安全,建议使用公钥认证或限制 root 登录的 IP 地址。
8. 基于 SSH 进行免密数据传输(SCP)
-
配置 SSH 公钥认证:通过
ssh-keygen生成密钥对,并使用ssh-copy-id将公钥复制到远程服务器。 -
使用
scp传输文件:-
从本地传输到远程服务器:
scp /path/to/local_file user@remote_host:/path/to/remote_directory -
从远程服务器传输到本地:
scp user@remote_host:/path/to/remote_file /path/to/local_directory
-
-
常用选项:
-r:递归传输目录。-P:指定端口。-v:显示详细进度。-C:压缩传输。
小知识理解库:
公钥认证过程 当 node1 尝试通过 SSH 登录 node2 时:
node1 告诉 node2:“我想用公钥认证登录。”
node2 检查 ~/.ssh/authorized_keys 文件,找到 node1 的公钥。
node2 生成一个随机字符串,并用 node1 的公钥加密,发送给 node1。
node1 用自己的私钥解密这个字符串,并将解密后的结果发送回 node2。
node2 验证解密结果是否正确:
如果正确,允许登录。 如果不正确,拒绝登录。
禁用挑战-响应认证意味着关闭 SSH 服务中的一种额外认证机制。禁用后,用户只能通过密码认证或公钥认证登录。如果不需要多因素认证,建议禁用挑战-响应认证以简化流程和提高性能。
想象一下,你有一个保险箱,打开它需要两步:
-
输入密码。
-
回答一个问题(比如“你最喜欢的颜色是什么?”)。
挑战-响应认证就是这个“回答问题”的步骤。
禁用挑战-响应认证是什么意思?
禁用挑战-响应认证就是去掉“回答问题”的步骤。 现在你只需要输入密码就可以打开保险箱了。
为什么要禁用挑战-响应认证?
简单方便:如果你觉得“回答问题”太麻烦,去掉它会让登录更简单。 更快:去掉一个步骤,登录速度会更快。 避免麻烦:如果“回答问题”的步骤没设置好,可能会导致登录失败。