Mac 上 SSH 使用教程:新手必看!
SSH(Secure Shell)是一种加密的网络协议,用于安全地访问远程计算机。它允许你在你的 Mac 和另一台计算机(通常是服务器)之间建立一个安全的连接,就像你直接坐在那台计算机前一样操作。无论是管理网站、配置服务器、传输文件,还是进行远程开发,SSH 都是一个强大且必不可少的工具。
对于 Mac 用户来说,幸运的是,SSH 客户端已经内置在 macOS 中。你无需安装任何额外的软件,就可以直接通过“终端”(Terminal)应用程序使用 SSH。
本文将详细介绍如何在 Mac 上使用 SSH,涵盖从基础连接到高级配置的各个方面,即使是完全的 SSH 新手也能轻松上手。
一、 准备工作
在使用 SSH 之前,你需要准备以下信息:
-
远程服务器的 IP 地址或域名: 这是你想要连接的计算机的唯一标识符。如果你要连接到网站服务器,通常会从你的主机提供商那里获得这个信息。例如:
192.168.1.100
或example.com
。 -
远程服务器的用户名: 这是你在远程服务器上的账户名。例如:
root
、admin
或yourusername
。 -
远程服务器的密码或密钥: 这是用于验证你身份的方式。你可以使用密码(较不安全)或 SSH 密钥对(更安全,推荐)。
二、 通过终端连接到远程服务器
-
打开终端:
- 你可以通过“启动台”(Launchpad)中的“其他”文件夹找到“终端”。
- 或者,使用 Spotlight 搜索(按下 Command + 空格键),输入“Terminal”,然后按回车键。
-
使用 SSH 命令连接:
在终端中,输入以下命令,并根据你的实际情况替换相应的信息:
bash
ssh username@remote_host
*username
: 你在远程服务器上的用户名。
*remote_host
: 远程服务器的 IP 地址或域名。
* 例如:ssh [email protected]
或者ssh [email protected]
按下回车键后,SSH 会尝试连接到远程服务器。
-
首次连接提示(如果适用):
如果你是第一次连接到这台服务器,终端会显示一个类似下面的消息:
The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])?这是 SSH 的安全机制,用于防止中间人攻击。它会显示远程服务器的公钥指纹,让你确认是否信任这台服务器。通常情况下,你可以输入
yes
并按下回车键。这样,SSH 会将该服务器的公钥添加到你的~/.ssh/known_hosts
文件中,以后连接时就不会再提示了。 -
输入密码:
如果远程服务器使用密码进行身份验证,终端会提示你输入密码:
username@remote_host's password:
输入密码时,屏幕上不会显示任何字符(包括星号),这是为了安全考虑。输入完成后,按下回车键。
-
连接成功!
如果一切顺利,你现在应该已经成功连接到远程服务器。终端会显示远程服务器的欢迎信息,并显示一个命令提示符,你可以在这里输入命令来操作远程服务器。
三、 SSH 密钥对:更安全的身份验证
使用密码进行身份验证虽然简单,但存在安全风险。如果你的密码被泄露,任何人都可以访问你的服务器。SSH 密钥对提供了一种更安全、更方便的身份验证方式。
1. 生成 SSH 密钥对:
在你的 Mac 终端中,输入以下命令:
bash
ssh-keygen -t rsa -b 4096 -C "[email protected]"
-t rsa
: 指定密钥类型为 RSA。-b 4096
: 指定密钥长度为 4096 位(更安全)。-C "[email protected]"
: 添加一个注释,通常是你的电子邮件地址,方便识别。
按下回车键后,终端会提示你:
- Enter file in which to save the key (/Users/yourusername/.ssh/id_rsa): 这是密钥文件的保存路径,通常使用默认路径即可,直接按回车键。
- Enter passphrase (empty for no passphrase): 这是为你的私钥设置一个密码(可选,但强烈建议)。设置密码后,每次使用私钥时都需要输入这个密码,进一步提高安全性。
- Enter same passphrase again: 再次输入密码进行确认。
完成后,会在 ~/.ssh/
目录下生成两个文件:
id_rsa
: 你的私钥(绝不能泄露)。id_rsa.pub
: 你的公钥(可以安全地分享)。
2. 将公钥复制到远程服务器:
有多种方法可以将公钥复制到远程服务器。
-
使用
ssh-copy-id
命令(推荐):如果远程服务器支持
ssh-copy-id
命令,这是最简单的方法:bash
ssh-copy-id username@remote_host
然后输入远程用户的密码,公钥就会自动复制到远程服务器。 -
手动复制:
如果远程服务器不支持
ssh-copy-id
,你可以手动复制公钥内容:-
在你的 Mac 上,显示公钥内容:
bash
cat ~/.ssh/id_rsa.pub -
复制输出的全部内容(以
ssh-rsa
开头的一长串字符)。 -
使用 SSH 连接到远程服务器(使用密码)。
-
在远程服务器上,编辑
~/.ssh/authorized_keys
文件(如果该文件不存在,则创建它):bash
mkdir -p ~/.ssh #如果.ssh目录不存在,创建它
nano ~/.ssh/authorized_keys #使用nano编辑器,也可以使用vim等其他编辑器 -
将你复制的公钥内容粘贴到
authorized_keys
文件中,确保它单独占一行。 -
保存并关闭文件。
-
(可选,但推荐) 修改权限
bash
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
-
3. 使用密钥对连接:
现在,你可以使用密钥对连接到远程服务器,而无需输入密码:
bash
ssh username@remote_host
如果设置了私钥密码,终端会提示你输入密码。
四、 SSH 配置文件:简化连接
如果你经常连接到多个服务器,或者需要使用不同的端口、用户名等,手动输入这些信息会很麻烦。SSH 配置文件可以让你将这些信息保存起来,方便以后使用。
-
创建或编辑配置文件:
在你的 Mac 上,编辑
~/.ssh/config
文件(如果该文件不存在,则创建它):bash
nano ~/.ssh/config -
添加配置项:
在配置文件中,你可以为每个服务器添加一个配置块,如下所示:
“`
Host myServer
HostName example.com
User myuser
Port 2222
IdentityFile ~/.ssh/my_server_key
IdentitiesOnly yesHost anotherServer
HostName 192.168.1.200
User root
“`Host
: 一个自定义的别名,用于标识这个服务器。HostName
: 远程服务器的 IP 地址或域名。User
: 远程服务器的用户名。Port
: SSH 端口(默认为 22,如果服务器使用其他端口,需要指定)。IdentityFile
: 指定用于连接的私钥文件路径(如果使用密钥对)。IdentitiesOnly yes
: 只使用指定的密钥
-
使用别名连接:
保存配置文件后,你可以使用你在
Host
行定义的别名来连接到服务器:bash
ssh myServerSSH 会自动读取配置文件中的信息,连接到相应的服务器。
五、 SSH 高级用法
-
端口转发(隧道):
SSH 端口转发允许你将本地端口的流量通过 SSH 连接转发到远程服务器,或者反过来。这可以用于访问远程服务器上的服务,或者绕过防火墙限制。
-
本地端口转发:
bash
ssh -L local_port:remote_host:remote_port username@ssh_server
例如,将本地8080端口转发到远程web服务器的80端口:
bash
ssh -L 8080:localhost:80 username@ssh_server
然后在本地浏览器访问localhost:8080
,实际上访问的是远程服务器的80端口。 -
远程端口转发:
bash
ssh -R remote_port:local_host:local_port username@ssh_server
-
-
通过跳板机连接:
如果你需要通过一台中间服务器(跳板机)才能访问目标服务器,可以使用
-J
选项:bash
ssh -J username@jump_host username@target_host -
执行远程命令:
你可以在 SSH 连接命令后面直接指定要在远程服务器上执行的命令:
bash
ssh username@remote_host "ls -l /home/username" -
使用
scp
传输文件:scp
(Secure Copy)是基于 SSH 的文件传输工具,用于在本地和远程服务器之间安全地复制文件。-
从本地复制到远程:
bash
scp local_file username@remote_host:remote_path -
从远程复制到本地:
bash
scp username@remote_host:remote_file local_path
-
-
使用rsync进行同步
rsync
是一个快速、通用且极其灵活的复制工具。与scp
不同,rsync
仅复制源和目标之间不同的部分,这使得它在同步大型文件或目录时非常高效。rsync
可以通过 SSH 连接进行安全传输。- 从本地同步到远程
bash
rsync -avz -e ssh /path/to/local/folder username@remote_host:/path/to/remote/destination
-a
: 归档模式,保留权限、时间戳、符号链接等。
-v
: 详细模式,显示传输过程。
-z
: 压缩传输,加快速度。
-e ssh
: 使用 SSH 进行安全传输。 - 从远程到本地
“`bash
rsync -avz -e ssh username@remote_host:/path/to/remote/folder /path/to/local/destination
“`
六、 常见问题及解决方法 - 从本地同步到远程
-
连接超时:
- 检查网络连接是否正常。
- 检查远程服务器是否已启动 SSH 服务。
- 检查防火墙是否阻止了 SSH 连接。
-
Permission denied (publickey,password):
- 检查用户名和密码是否正确。
- 如果你使用密钥对,检查私钥是否正确,公钥是否已添加到远程服务器的
~/.ssh/authorized_keys
文件中。 - 检查
authorized_keys
文件的权限,通常是 600。 - 确保你的服务器sshd_config配置中允许密钥登录. (
PubkeyAuthentication yes
)
-
Connection refused:
- 检查 SSH 服务是否在远程服务器上运行。
- 检查 SSH 端口是否正确(默认为 22)。
- 检查防火墙是否阻止了 SSH 连接。
七、总结
SSH 是一个强大而灵活的工具,掌握它可以让你更高效地管理和访问远程计算机。本文详细介绍了在 Mac 上使用 SSH 的各个方面,从基本连接到高级配置和常见问题。希望这篇教程能帮助你更好地理解和使用 SSH。 随着你对 SSH 的深入了解,你会发现它在各种场景中都能发挥重要作用。 不断练习和探索,你将成为 SSH 的熟练使用者。