一、什么是SSH服务?¶
SSH(Secure Shell)是一种安全的网络协议,用于通过加密方式远程管理Linux服务器。相比早期不安全的Telnet(明文传输),SSH能对登录信息、命令和数据进行加密,防止被黑客窃听或篡改。
二、安装SSH服务¶
首先需要在服务器上安装SSH服务端程序。不同Linux发行版安装命令不同:
- Ubuntu/Debian:
sudo apt update # 更新软件源
sudo apt install openssh-server # 安装SSH服务端
- CentOS/RHEL:
sudo yum install openssh-server # 安装SSH服务端(yum系统)
# 或 CentOS 8+ 使用 dnf:
sudo dnf install openssh-server
安装完成后,启动SSH服务并设置开机自启:
sudo systemctl start sshd # 启动服务(Ubuntu/Debian用ssh)
sudo systemctl enable sshd # 设置开机自启
检查服务状态:
sudo systemctl status sshd # 若显示“active (running)”则已启动
三、使用SSH远程连接服务器¶
安装后,本地机器(Windows/macOS/Linux)可通过SSH客户端连接服务器。
- Windows用户:
- 安装PuTTY(免费SSH客户端)或使用Windows 10+自带的OpenSSH客户端(在“应用和功能”→“可选功能”中添加)。
- 打开命令提示符或PowerShell,输入:
ssh 用户名@服务器IP # 例如:ssh testuser@192.168.1.100
-
首次连接时会提示“是否继续连接”,输入
yes并回车。 -
Linux/macOS用户:
直接在终端输入:
ssh 用户名@服务器IP # 例如:ssh alice@192.168.1.100
输入密码后即可登录。
四、配置SSH服务(安全设置)¶
SSH的核心配置文件是/etc/ssh/sshd_config(Ubuntu/Debian为/etc/ssh/sshd_config,CentOS为/etc/ssh/sshd_config)。修改前建议备份原文件:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
关键配置项及作用:
- 修改SSH端口(避免默认22端口)
默认端口为22,易被扫描攻击。建议改为1024-65535之间的非默认端口(如2222):
# 打开配置文件
sudo nano /etc/ssh/sshd_config
# 找到并修改:Port 22 → Port 2222(示例端口,可自定义)
- 禁止root直接登录
直接用root登录风险高,建议用普通用户登录后再提权:
# 找到并修改:PermitRootLogin yes → PermitRootLogin no
- 禁用密码登录(推荐用密钥登录)
密码易被暴力破解,后续章节会介绍密钥登录。若暂时禁用密码,需设为:
# 找到并修改:PasswordAuthentication yes → PasswordAuthentication no
- 允许指定用户登录
限制只有特定用户能登录,避免无关用户尝试:
# 添加:AllowUsers 用户名1 用户名2(多个用户用空格分隔)
AllowUsers alice bob # 仅允许alice和bob登录
修改完成后,重启SSH服务使配置生效:
sudo systemctl restart sshd # 重启服务
五、防火墙开放SSH端口¶
服务器防火墙默认可能阻止SSH连接,需开放自定义端口(如2222):
- Ubuntu/Debian(ufw防火墙):
sudo ufw allow 2222/tcp # 开放2222端口(TCP协议)
sudo ufw reload # 重载防火墙
- CentOS/RHEL(firewalld防火墙):
sudo firewall-cmd --add-port=2222/tcp --permanent # 永久开放端口
sudo firewall-cmd --reload # 重载防火墙规则
六、SSH密钥登录(更安全的方式)¶
密钥登录无需输入密码,通过本地生成的密钥对验证身份,适合长期使用。
步骤:
1. 本地生成密钥对(在本地机器执行,非服务器):
ssh-keygen -t ed25519 # 生成密钥对(推荐ed25519算法,速度快)
# 一路回车即可,默认保存在~/.ssh/id_ed25519(私钥)和id_ed25519.pub(公钥)
- 将公钥复制到服务器:
ssh-copy-id -i ~/.ssh/id_ed25519.pub 用户名@服务器IP # 输入服务器密码,自动复制公钥
- 禁用密码登录(在
sshd_config中修改):
PasswordAuthentication no # 禁用密码登录
PubkeyAuthentication yes # 启用密钥登录(默认已开启)
- 重启服务:
sudo systemctl restart sshd
验证:下次登录时,直接执行ssh 用户名@服务器IP即可免密码登录。
七、常见问题排查¶
- 连接超时:检查IP是否正确、端口是否开放、防火墙规则是否生效。
- 权限错误:
~/.ssh目录权限需设为700,authorized_keys权限设为600:
chmod 700 ~/.ssh # 目录权限
chmod 600 ~/.ssh/authorized_keys # 公钥文件权限
- 日志排查:通过
/var/log/auth.log查看SSH连接日志,定位错误原因。
总结¶
SSH是Linux服务器远程管理的核心工具,配置时需重点关注端口修改、禁止root直连、禁用密码登录(密钥登录)和防火墙开放。通过以上步骤,既能安全远程连接服务器,又能大幅降低被攻击风险。