在 macOS 系统中配置 SSH 服务器可以让用户通过远程连接安全地管理设备,适用于开发运维、文件传输或远程办公等场景,macOS 基于 Unix 系统,默认已内置 OpenSSH 服务器组件,用户只需通过简单配置即可启用,以下是详细的配置步骤、功能优化及常见问题解决方案。
检查并启用 SSH 服务器
macOS 通常默认未开启 SSH 服务,需手动启动并设置开机自启。
-
通过系统偏好设置启用(适用于 macOS Ventura 及 earlier 版本):
- 打开“系统偏好设置”>“共享”,勾选“远程登录”选项。
- 在“允许访问”下拉菜单中选择“仅这些用户”或“所有用户”,若选择前者,需点击“+”添加允许远程登录的系统用户。
- 记录本机 IP 地址(可通过“网络”设置查看),后续远程连接时需使用此地址。
-
通过命令行启用(适用于 macOS Monterey 及 later 版本,或终端操作习惯用户):
- 打开“终端”(Terminal),输入以下命令启动 SSH 服务:
sudo systemstart enable com.openssh.sshd sudo systemstart start com.openssh.sshd
- 检查服务状态:
systemstart status com.openssh.sshd
若显示“active”,则表示服务已正常运行。
- 打开“终端”(Terminal),输入以下命令启动 SSH 服务:
SSH 服务器基础配置
通过修改配置文件(/etc/ssh/sshd_config)可优化服务器行为,建议操作前先备份原文件:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
-
修改默认端口(提升安全性):
编辑配置文件:sudo nano /etc/ssh/sshd_config
找到
#Port 22一行,取消注释并修改为其他端口(如2222):Port 2222
-
禁用 root 用户直接登录:
确保以下配置未注释且值为no:PermitRootLogin no
-
限制登录用户:
仅允许特定用户远程登录,添加以下内容(替换username为实际用户名):AllowUsers username1 username2
-
启用密钥认证(比密码更安全):
取消注释并修改以下配置:PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
-
保存并应用配置:
在nano中按Ctrl+X,输入Y保存,然后重启 SSH 服务:sudo systemstart restart com.openssh.sshd
防火墙与网络设置
macOS 自带防火墙可能阻止 SSH 连接,需手动放行:
-
通过系统设置放行(Ventura 及 later):
- 打开“系统设置”>“网络”>“防火墙”,点击“防火墙选项”。
- 添加“允许传入连接”的应用,选择“远程登录”或手动指定 SSH 服务(端口 22 或自定义端口)。
-
通过命令行放行(使用
pf防火墙):
编辑防火墙规则文件/etc/pf.conf,添加以下规则(以端口 2222 为例):pass in proto tcp from any to any port 2222
重新加载规则:
sudo pfctl f /etc/pf.conf
客户端连接与验证
-
macOS/Linux 客户端:
打开终端,使用ssh命令连接:ssh username@192.168.1.100 p 2222
首次连接会提示确认主机密钥(输入
yes),之后输入用户密码即可登录。 -
Windows 客户端:
使用 PowerShell 或第三方工具(如 PuTTY、Xshell),在主机地址栏输入ssh username@IP地址 p 端口。 -
免密登录配置:
在客户端生成 SSH 密钥对(若无):sshkeygen t rsa b 4096
将公钥复制到服务器的
~/.ssh/authorized_keys文件:sshcopyid i ~/.ssh/id_rsa.pub username@192.168.1.100 p 2222
之后连接时无需输入密码,可直接通过密钥认证登录。
服务器安全加固建议
-
定期更新系统:
macOS 更新通常包含 OpenSSH 安全补丁,可通过“系统设置”>“软件更新”检查安装。 -
使用 fail2ban 防暴力破解:
安装 fail2ban(需先安装 Xcode 命令行工具):brew install fail2ban
配置
/etc/fail2ban/jail.local,添加 SSH 监控规则,限制失败登录次数(如 5 次后封禁 IP 10 分钟)。 -
禁用密码认证(仅保留密钥认证):
在sshd_config中设置:PasswordAuthentication no
重启服务后,仅持有密钥的用户可登录,大幅提升安全性。
-
日志监控:
SSH 日志默认存储在/var/log/system.log(或使用log show predicate 'eventMessage contains "sshd"'查看实时日志),定期检查异常登录记录。
常见问题与解决方案
以下为 macOS SSH 服务器配置中可能遇到的问题及处理方法:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 连接超时或被拒绝 | SSH 服务未启动、防火墙阻止、端口错误 | 检查服务状态(systemstart status)、放行防火墙端口、确认连接端口与配置一致 |
| 提示 “Permission denied (publickey,password)” | 密钥认证失败、用户名错误、目录权限不正确 | 验证公钥是否已添加到 authorized_keys、检查用户名、确保 ~/.ssh 目录权限为 700(chmod 700 ~/.ssh) |
| 登录后立即断开 | Shell 配置错误、sshd_config 中 ForceCommand 限制 |
检查用户默认 Shell(echo $SHELL)、注释或修改 sshd_config 中的 ForceCommand 行 |
相关问答 FAQs
Q1: 如何在 macOS 上查看当前登录的 SSH 用户?
A1: 可通过以下命令查看当前活跃的 SSH 会话:
who
或查看 SSH 登录日志(过滤 sshd 相关条目):
log show predicate 'eventMessage contains "sshd"' debug last 1h
若需强制踢出用户,可先通过 who 查询会话 ID(如 pts/0),然后执行:
pkill t pts/0
Q2: 修改 SSH 端口后无法连接,如何排查?
A2: 首先检查端口是否被占用(sudo lsof i :2222),若未被占用则确认防火墙是否放行新端口(sudo pfctl s rules 查看规则),需确保客户端连接时使用正确的端口号(如 ssh p 2222 username@IP),若仍无法连接,可尝试临时恢复默认端口 22 排查是否为配置语法错误(检查 sshd_config 中是否有拼写错误或缺少空格)。
