Linux SSH 完全指南:从配置、使用到排障
SSH(Secure Shell)是 Linux 系统管理中最核心的工具之一,它通过加密通道实现远程登录与操作,替代了不安全的 Telnet 协议。本文将从基础配置到高级排障,带你系统掌握 SSH 的使用方法,适用于运维新手与需要优化远程管理流程的工程师。
一、SSH 基础:原理与安装
在开始配置前,需先明确 SSH 的工作逻辑与环境准备,这是后续操作的基础。
1. 核心原理
SSH 采用 非对称加密 机制保障安全,核心流程分为三步:
- 客户端发起连接请求,服务端返回公钥;
- 客户端用公钥加密会话密钥,发送给服务端;
- 服务端用私钥解密会话密钥,后续通信通过该密钥对称加密,兼顾安全性与效率。
2. 环境安装
大部分 Linux 发行版默认预装 OpenSSH(SSH 主流实现),可通过以下命令检查与安装:
| 系统类型 | 检查是否安装 | 安装命令 | |
|---|---|---|---|
| CentOS/RHEL | `rpm -qa | grep openssh` | yum install openssh-server |
| Ubuntu/Debian | `dpkg -l | grep openssh` | apt install openssh-server |
| 通用方式 | ssh -V(查看版本) | - |
安装完成后,需启动并设置开机自启:
bash
# 启动 SSH 服务
systemctl start sshd # CentOS/RHEL 用 sshd,Ubuntu 用 ssh
# 设置开机自启
systemctl enable sshd
# 查看服务状态(确认是否正常运行)
systemctl status sshd
二、SSH 核心配置:安全与效率优化
SSH 的默认配置(/etc/ssh/sshd_config)虽能直接使用,但存在安全风险(如默认端口、允许 root 登录),需针对性优化。
1. 配置文件路径
- 服务端配置文件:
/etc/ssh/sshd_config(核心,需 root 权限修改) - 客户端配置文件:
~/.ssh/config(用户级,优化本地连接体验,可选)
2. 关键配置项优化(服务端)
修改 sshd_config 前,建议先备份原文件:cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak,然后用 vim 编辑,核心优化项如下:
| 配置项 | 默认值 | 推荐设置 | 说明 |
|---|---|---|---|
| Port | 22 | 1024-65535 之间 | 避免默认端口被暴力扫描,如 2222(需确保端口未被占用) |
| PermitRootLogin | yes | no | 禁止 root 直接登录,降低风险,需通过普通用户 sudo 提权 |
| PasswordAuthentication | yes | no | 禁用密码登录,强制使用密钥登录,彻底防范暴力破解 |
| AllowUsers | 未配置 | 用户名 1 用户名 2 | 仅允许指定用户登录,如 AllowUsers admin test,缩小权限范围 |
| ClientAliveInterval | 0 | 300 | 服务端每隔 300 秒向客户端发心跳包,避免连接因超时断开 |
| ClientAliveCountMax | 3 | 3 | 心跳包未响应次数达到 3 次后,断开连接 |
配置完成后,需重启 SSH 服务使生效:
systemctl restart sshd
3. 客户端配置优化(可选)
若需频繁连接多个远程服务器,可在本地 ~/.ssh/config 中配置别名,简化连接命令。示例:
# 编辑客户端配置文件
vim ~/.ssh/config
# 加入以下内容(按实际服务器信息修改)
Host server1 # 别名,连接时用 ssh server1
HostName 192.168.1.100 # 远程服务器 IP 或域名
Port 2222 # 远程服务器 SSH 端口
User admin # 登录用户名
IdentityFile ~/.ssh/id_rsa # 本地私钥路径
Host server2
HostName 10.0.0.5
Port 2222
User test
配置后,直接用 ssh server1 即可连接,无需重复输入 IP、端口与用户名。
三、SSH 实战使用:登录与文件传输
掌握配置后,核心操作集中在 “远程登录” 与 “文件传输”,以下是最常用的命令与场景。
1. 密钥登录(推荐)
密钥登录比密码登录更安全,步骤分为 “生成密钥对” 与 “上传公钥到服务器”。
步骤 1:本地生成密钥对
在客户端(本地电脑)执行以下命令,全程按回车即可(无需设置密码,若需更高安全可设置密钥密码):
ssh-keygen -t rsa # 生成 RSA 类型密钥对,也可使用更安全的 ed25519:ssh-keygen -t ed25519
生成后,在 ~/.ssh/ 目录下会出现两个文件:
id_rsa:私钥,保存在本地,绝对不能泄露;id_rsa.pub:公钥,需上传到远程服务器。
步骤 2:上传公钥到远程服务器
用 ssh-copy-id 命令快速上传公钥(需先确保服务器仍允许密码登录,或已通过其他方式登录过):
# 格式:ssh-copy-id -p 端口 用户名@服务器IP
ssh-copy-id -p 2222 admin@192.168.1.100
执行后,输入服务器用户密码,公钥会自动添加到服务器的 ~/.ssh/authorized_keys 文件中(该文件存储允许登录的客户端公钥)。
步骤 3:测试密钥登录
上传完成后,直接用 ssh 命令登录,无需输入密码:
# 普通方式
ssh -p 2222 admin@192.168.1.100
# 若配置了客户端别名,直接用
ssh server1
2. 密码登录(不推荐,仅临时使用)
若未配置密钥或需临时登录,可直接用密码登录(需确保服务器 PasswordAuthentication 为 yes):
ssh -p 2222 admin@192.168.1.100
输入密码后即可登录,注意密码输入时不会显示字符,正常输入即可。
3. 文件传输:scp 与 sftp
SSH 除了远程登录,还支持加密文件传输,常用工具为 scp(简单文件拷贝)与 sftp(交互式文件管理)。
(1)scp 命令(适合单文件 / 目录拷贝)
- 本地文件上传到服务器:
# 格式:scp -P 端口 本地文件路径 用户名@服务器IP:服务器目标路径 scp -P 2222 ~/local_file.txt admin@192.168.1.100:/home/admin/ - 服务器文件下载到本地:
# 格式:scp -P 端口 用户名@服务器IP:服务器文件路径 本地目标路径 scp -P 2222 admin@192.168.1.100:/home/admin/server_file.txt ~/ - 拷贝目录:需加
-r参数(递归拷贝):scp -P 2222 -r ~/local_dir admin@192.168.1.100:/home/admin/
(2)sftp 命令(适合多文件交互式管理)
当需要多次上传 / 下载文件时,sftp 更便捷,类似 FTP 操作:
# 连接服务器
sftp -P 2222 admin@192.168.1.100
# 常用命令(连接后执行)
put local_file.txt # 上传本地文件到服务器当前目录
get server_file.txt # 下载服务器文件到本地当前目录
ls # 查看服务器当前目录文件
cd dir # 切换服务器目录
lcd local_dir # 切换本地目录
quit # 退出 sftp
四、SSH 排障:常见问题与解决方案
SSH 连接失败是运维中常见问题,需按 “网络 → 服务 → 配置 → 密钥” 的顺序排查,以下是高频问题的解决方法。
1. 网络层面:无法连接到服务器
现象:执行 ssh 命令后,提示 Connection timed out 或 No route to host。排查步骤:
- 检查客户端与服务器是否互通:
ping 服务器IP,若不通,检查服务器是否开机、网线是否插好、路由器配置是否正常; - 检查服务器防火墙是否开放 SSH 端口(以 CentOS 为例):
bash
# 查看已开放端口 firewall-cmd --list-ports # 若未开放,添加端口(如 2222)并重启防火墙 firewall-cmd --add-port=2222/tcp --permanent firewall-cmd --reload - 若服务器在云平台(如阿里云、腾讯云),需检查 “安全组” 是否开放 SSH 端口,需手动添加入站规则,允许客户端 IP 访问目标端口。
2. 服务层面:SSH 服务未启动
现象:提示 Connection refused。排查步骤:
- 登录服务器本地(或通过云平台控制台),检查 SSH 服务状态:
systemctl status sshd; - 若服务未启动,执行
systemctl start sshd; - 若启动失败,查看日志定位原因:
journalctl -u sshd,常见原因包括配置文件语法错误(如端口被占用、配置项拼写错误)。
3. 配置层面:配置项错误导致登录失败
现象:提示 Permission denied(非密码错误),或密钥登录无效。排查步骤:
- 检查服务器
sshd_config配置:- 若密码登录失败,确认
PasswordAuthentication是否为yes; - 若密钥登录失败,确认
PasswordAuthentication是否为no、PubkeyAuthentication是否为yes; - 确认
AllowUsers是否包含当前登录用户,若配置了该选项,未在列表中的用户无法登录。
- 若密码登录失败,确认
- 检查服务器
~/.ssh/authorized_keys文件权限:权限过宽会导致 SSH 拒绝使用,需设置为 600(仅所有者可读写):chmod 600 ~/.ssh/authorized_keys chown 用户名:用户名 ~/.ssh/authorized_keys # 确保所有者是登录用户
4. 密钥层面:密钥登录失败
现象:提示 Permission denied (publickey)。排查步骤:
- 检查客户端私钥权限:私钥(
~/.ssh/id_rsa)权限需为 600,否则 SSH 会忽略该密钥,执行chmod 600 ~/.ssh/id_rsa; - 检查客户端公钥是否正确上传到服务器
authorized_keys:可手动对比本地id_rsa.pub与服务器authorized_keys的内容,确保一致; - 若使用
ssh-copy-id上传公钥后仍失败,检查服务器~/.ssh目录权限:需为 700(仅所有者可读写执行),执行chmod 700 ~/.ssh。
五、总结
SSH 是 Linux 远程管理的基石,掌握 “安全配置(改端口、禁 root、用密钥)→ 高效使用(客户端别名、scp/sftp)→ 有序排障(按网络 - 服务 - 配置 - 密钥排查)” 的流程,能大幅提升运维效率与系统安全性。建议将本文作为手册,在实际操作中逐步熟练,遇到问题时按排障步骤定位,多数问题能快速解决。

964

被折叠的 条评论
为什么被折叠?



