使用 SSH (Secure Shell)
SSH 是连接远程服务器的标准、安全的方式,macOS 系统已经预装了 SSH 客户端,所以我们无需安装任何额外软件。

基本连接 (使用用户名和密码)
这是最直接的方法,适用于临时或个人服务器。
步骤 1:获取服务器信息
你需要从服务器管理员或自己那里获取以下信息:
- 服务器 IP 地址 或 域名 (
168.1.100或server.example.com) - 用户名 (
root,admin, 或你的普通用户名john)
步骤 2:打开终端
在 macOS 上,按下 Command (⌘) + 空格键 打开 Spotlight 搜索,输入 Terminal 或 终端 并回车,你也可以在 “应用程序” > “实用工具” 文件夹中找到它。
步骤 3:执行连接命令
在终端窗口中,输入以下格式的命令:

ssh username@server_ip_or_domain
示例:
假设你的用户名是 ec2-user,服务器 IP 是 14.92.123,那么命令就是:
ssh ec2-user@52.14.92.123
步骤 4:接受密钥并输入密码
-
首次连接:系统会提示你该服务器的 SSH 密钥指纹,询问你是否信任该主机,输入
yes并回车。The authenticity of host '52.14.92.123 (52.14.92.123)' can't be established. ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes这是为了防止“中间人攻击”,确认后,系统会将该主机的密钥记录在你的本地。
-
输入密码:系统会提示你输入密码。*你输入的字符是看不见的(不会显示为 ``),这是正常的安全设计。** 直接输入密码,然后按回车。
(图片来源网络,侵删)
如果密码正确,你将成功登录到 Linux 服务器的命令行界面。
更安全的连接 (使用 SSH 密钥对)
每次输入密码很麻烦,也不安全,使用 SSH 密钥对是目前最推荐、最安全的方法,它基于公钥/私钥加密,无需输入密码即可登录。
步骤 1:在 macOS 上生成 SSH 密钥对
如果你还没有 SSH 密钥,请在终端中运行以下命令,一路按回车即可使用默认设置(密钥会保存在 ~/.ssh/ 目录下)。
ssh-keygen -t ed25519 -C "your_email@example.com"
-t ed25519:指定使用更现代、更安全的 Ed25519 算法,如果你的服务器非常老旧,也可以使用-t rsa。-C "...":这是一个注释,通常填入你的邮箱,方便识别密钥。
执行后,你会得到两个文件:
~/.ssh/id_ed25519:私钥,绝对不能泄露! 保留在你的 Mac 上。~/.ssh/id_ed25519.pub:公钥,需要上传到服务器上。
步骤 2:将公钥上传到 Linux 服务器
有几种方法可以将公钥添加到服务器的授权列表中(通常是 ~/.ssh/authorized_keys 文件)。
方法 A:使用 ssh-copy-id (最简单)
如果你的 macOS 和 Linux 服务器版本都较新,这是最简单的方法,它会自动将你的公钥追加到服务器的 authorized_keys 文件中。
ssh-copy-id username@server_ip_or_domain
系统会提示你输入该服务器的密码,输入一次密码后,你的公钥就会被安全地复制过去。
方法 B:手动复制 (ssh-copy-id 不可用)
-
在 macOS 上,查看你的公钥内容:
cat ~/.ssh/id_ed25519.pub
你会看到一长串以
ssh-ed25519开头,以你的邮箱结尾的文本。完整复制这一整行文本。 -
登录到你的 Linux 服务器(使用密码方式):
ssh username@server_ip_or_domain
-
在服务器上,确保
.ssh目录存在并拥有正确的权限:mkdir -p ~/.ssh chmod 700 ~/.ssh
-
将刚刚复制的公钥文本追加到
authorized_keys文件中:echo "粘贴你刚才复制的公钥文本到这里" >> ~/.ssh/authorized_keys
-
设置
authorized_keys文件的权限:chmod 600 ~/.ssh/authorized_keys
-
退出服务器 (
exit),然后尝试重新登录。
步骤 3:使用密钥登录
再次尝试连接服务器:
ssh username@server_ip_or_domain
这次,如果一切顺利,你应该可以直接登录,而无需输入密码!
使用 SSH 配置文件 (~/.ssh/config)
如果你需要频繁连接多个服务器,每次都输入长长的命令会很麻烦。~/.ssh/config 文件可以让你为每个服务器设置一个简洁的别名。
步骤 1:创建或编辑配置文件
在终端中运行:
nano ~/.ssh/config
(nano 是一个简单的文本编辑器,你也可以用 vim 或其他编辑器)
步骤 2:添加服务器配置
在文件中添加如下格式的配置:
# 服务器别名
Host my-server-alias
# 实际的服务器IP或域名
HostName 192.168.1.100
# 登录用户名
User ec2-user
# 指定使用的私钥文件 (如果密钥文件名不是默认的 id_rsa 或 id_ed25519)
IdentityFile ~/.ssh/id_ed25519
# 端口号 (如果不是默认的 22)
Port 2222
步骤 3:使用别名登录
保存并关闭文件后,你就可以用别名来连接了:
ssh my-server-alias
这比输入完整命令方便多了!
高级技巧和常见问题
通过中间服务器跳转 (SSH 代理转发)
如果你的本地电脑无法直接访问目标服务器,但可以访问一个“跳板机”或“堡垒机”,你可以这样配置:
在 ~/.ssh/config 中这样写:
# 堡垒机配置
Host bastion
HostName bastion.example.com
User jump_user
IdentityFile ~/.ssh/bastion_key
# 目标服务器配置,通过堡垒机跳转
Host target-server
HostName 10.0.1.50
User target_user
# 关键在这里:通过堡垒机代理
ProxyJump bastion
# 或者使用旧版语法: ProxyCommand ssh -W %h:%p bastion
你只需要 ssh target-server,SSH 客户端会自动先连接到 bastion,然后再从 bastion 连接到 target-server。
端口转发 (隧道)
SSH 可以安全地转发端口,用于访问远程服务(如数据库、网页服务等)。
-
本地转发:将你本地的端口流量通过 SSH 隧道转发到远程服务器的某个端口。
# 将本地 8080 端口的访问,转发到远程服务器 my-server-alias 的 3306 (MySQL) 端口 ssh -L 8080:localhost:3306 my-server-alias
在你的 Mac 上访问
localhost:8080,就等于在远程服务器上访问localhost:3306。 -
远程转发:将远程服务器的端口流量通过 SSH 隧道转发到你本地的某个端口。
# 将远程服务器 my-server-alias 的 8080 端口,转发到本地服务器的 3000 端口 ssh -R 8080:localhost:3000 my-server-alias
常见问题排查
-
Permission denied (publickey,password).- 原因:无法通过密钥认证,也无法通过密码认证。
- 解决:
- 确认你使用的用户名和服务器 IP 是否正确。
- 如果使用密钥,检查
~/.ssh/config中的IdentityFile路径是否正确。 - 在服务器上,检查
~/.ssh/authorized_keys文件的内容是否正确,以及文件和目录的权限是否为600和700。 - 尝试使用
-v(verbose) 参数获取详细日志:ssh -v username@server_ip,查看在哪一步失败了。
-
ssh: connect to host ... port 22: Connection refused- 原因:目标服务器没有运行 SSH 服务,或者防火墙阻止了 22 端口。
- 解决:
- 确认服务器上的 SSH 服务正在运行 (
sudo systemctl status sshd或sudo service ssh status)。 - 确认服务器的防火墙(如
ufw,firewalld)允许 22 端口的入站连接。
- 确认服务器上的 SSH 服务正在运行 (
-
Warning: Permanently added ... to the list of known hosts.- 原因:你连接的服务器 IP/域名与之前记录的指纹不符(比如服务器重装了系统)。
- 解决:如果你确定是同一个服务器,可以编辑
~/.ssh/known_hosts文件,删除对应行,然后重新连接,如果不确定,请谨慎操作,可能是攻击。
希望这份详细的指南能帮助你顺利地在 macOS 上连接到 Linux 服务器!
