SSH在Mac上的使用教程:新手必看! – wiki基地

Mac 上 SSH 使用教程:新手必看!

SSH(Secure Shell)是一种加密的网络协议,用于安全地访问远程计算机。它允许你在你的 Mac 和另一台计算机(通常是服务器)之间建立一个安全的连接,就像你直接坐在那台计算机前一样操作。无论是管理网站、配置服务器、传输文件,还是进行远程开发,SSH 都是一个强大且必不可少的工具。

对于 Mac 用户来说,幸运的是,SSH 客户端已经内置在 macOS 中。你无需安装任何额外的软件,就可以直接通过“终端”(Terminal)应用程序使用 SSH。

本文将详细介绍如何在 Mac 上使用 SSH,涵盖从基础连接到高级配置的各个方面,即使是完全的 SSH 新手也能轻松上手。

一、 准备工作

在使用 SSH 之前,你需要准备以下信息:

  1. 远程服务器的 IP 地址或域名: 这是你想要连接的计算机的唯一标识符。如果你要连接到网站服务器,通常会从你的主机提供商那里获得这个信息。例如:192.168.1.100example.com

  2. 远程服务器的用户名: 这是你在远程服务器上的账户名。例如:rootadminyourusername

  3. 远程服务器的密码或密钥: 这是用于验证你身份的方式。你可以使用密码(较不安全)或 SSH 密钥对(更安全,推荐)。

二、 通过终端连接到远程服务器

  1. 打开终端:

    • 你可以通过“启动台”(Launchpad)中的“其他”文件夹找到“终端”。
    • 或者,使用 Spotlight 搜索(按下 Command + 空格键),输入“Terminal”,然后按回车键。
  2. 使用 SSH 命令连接:

    在终端中,输入以下命令,并根据你的实际情况替换相应的信息:

    bash
    ssh username@remote_host

    * username: 你在远程服务器上的用户名。
    * remote_host: 远程服务器的 IP 地址或域名。
    * 例如: ssh [email protected]或者ssh [email protected]

    按下回车键后,SSH 会尝试连接到远程服务器。

  3. 首次连接提示(如果适用):

    如果你是第一次连接到这台服务器,终端会显示一个类似下面的消息:

    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 文件中,以后连接时就不会再提示了。

  4. 输入密码:

    如果远程服务器使用密码进行身份验证,终端会提示你输入密码:

    username@remote_host's password:

    输入密码时,屏幕上不会显示任何字符(包括星号),这是为了安全考虑。输入完成后,按下回车键。

  5. 连接成功!

    如果一切顺利,你现在应该已经成功连接到远程服务器。终端会显示远程服务器的欢迎信息,并显示一个命令提示符,你可以在这里输入命令来操作远程服务器。

三、 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,你可以手动复制公钥内容:

    1. 在你的 Mac 上,显示公钥内容:

      bash
      cat ~/.ssh/id_rsa.pub

    2. 复制输出的全部内容(以 ssh-rsa 开头的一长串字符)。

    3. 使用 SSH 连接到远程服务器(使用密码)。

    4. 在远程服务器上,编辑 ~/.ssh/authorized_keys 文件(如果该文件不存在,则创建它):

      bash
      mkdir -p ~/.ssh #如果.ssh目录不存在,创建它
      nano ~/.ssh/authorized_keys #使用nano编辑器,也可以使用vim等其他编辑器

    5. 将你复制的公钥内容粘贴到 authorized_keys 文件中,确保它单独占一行。

    6. 保存并关闭文件。

    7. (可选,但推荐) 修改权限
      bash
      chmod 700 ~/.ssh
      chmod 600 ~/.ssh/authorized_keys

3. 使用密钥对连接:

现在,你可以使用密钥对连接到远程服务器,而无需输入密码:

bash
ssh username@remote_host

如果设置了私钥密码,终端会提示你输入密码。

四、 SSH 配置文件:简化连接

如果你经常连接到多个服务器,或者需要使用不同的端口、用户名等,手动输入这些信息会很麻烦。SSH 配置文件可以让你将这些信息保存起来,方便以后使用。

  1. 创建或编辑配置文件:

    在你的 Mac 上,编辑 ~/.ssh/config 文件(如果该文件不存在,则创建它):

    bash
    nano ~/.ssh/config

  2. 添加配置项:

    在配置文件中,你可以为每个服务器添加一个配置块,如下所示:

    “`
    Host myServer
    HostName example.com
    User myuser
    Port 2222
    IdentityFile ~/.ssh/my_server_key
    IdentitiesOnly yes

    Host anotherServer
    HostName 192.168.1.200
    User root
    “`

    • Host: 一个自定义的别名,用于标识这个服务器。
    • HostName: 远程服务器的 IP 地址或域名。
    • User: 远程服务器的用户名。
    • Port: SSH 端口(默认为 22,如果服务器使用其他端口,需要指定)。
    • IdentityFile: 指定用于连接的私钥文件路径(如果使用密钥对)。
    • IdentitiesOnly yes: 只使用指定的密钥
  3. 使用别名连接:

    保存配置文件后,你可以使用你在 Host 行定义的别名来连接到服务器:

    bash
    ssh myServer

    SSH 会自动读取配置文件中的信息,连接到相应的服务器。

五、 SSH 高级用法

  1. 端口转发(隧道):

    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

  2. 通过跳板机连接:

    如果你需要通过一台中间服务器(跳板机)才能访问目标服务器,可以使用 -J 选项:

    bash
    ssh -J username@jump_host username@target_host

  3. 执行远程命令:

    你可以在 SSH 连接命令后面直接指定要在远程服务器上执行的命令:

    bash
    ssh username@remote_host "ls -l /home/username"

  4. 使用 scp 传输文件:

    scp(Secure Copy)是基于 SSH 的文件传输工具,用于在本地和远程服务器之间安全地复制文件。

    • 从本地复制到远程:

      bash
      scp local_file username@remote_host:remote_path

    • 从远程复制到本地:

      bash
      scp username@remote_host:remote_file local_path

  5. 使用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

    “`
    六、 常见问题及解决方法

  6. 连接超时:

    • 检查网络连接是否正常。
    • 检查远程服务器是否已启动 SSH 服务。
    • 检查防火墙是否阻止了 SSH 连接。
  7. Permission denied (publickey,password):

    • 检查用户名和密码是否正确。
    • 如果你使用密钥对,检查私钥是否正确,公钥是否已添加到远程服务器的 ~/.ssh/authorized_keys 文件中。
    • 检查 authorized_keys文件的权限,通常是 600。
    • 确保你的服务器sshd_config配置中允许密钥登录. ( PubkeyAuthentication yes)
  8. Connection refused:

    • 检查 SSH 服务是否在远程服务器上运行。
    • 检查 SSH 端口是否正确(默认为 22)。
    • 检查防火墙是否阻止了 SSH 连接。

七、总结

SSH 是一个强大而灵活的工具,掌握它可以让你更高效地管理和访问远程计算机。本文详细介绍了在 Mac 上使用 SSH 的各个方面,从基本连接到高级配置和常见问题。希望这篇教程能帮助你更好地理解和使用 SSH。 随着你对 SSH 的深入了解,你会发现它在各种场景中都能发挥重要作用。 不断练习和探索,你将成为 SSH 的熟练使用者。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部