Loading

Mac免密连接ssh

Mac免密连接ssh

存储多个ssh信息

# ~/.ssh/config

Host dev
    HostName 192.168.1.100
    User root
    Port 22
    IdentityFile ~/.ssh/id_ed25519

在 macOS(客户端)上配置 SSH 密钥连接 Ubuntu(服务端),标准流程分为 生成密钥上传公钥服务端授权 三步。以下是针对你(Mac + Ghostty 环境)的详细实操指南:

第 1 步:在 Mac 上检查并生成密钥对

打开你的 Ghostty 终端,先检查是否已有密钥(避免覆盖旧密钥):

bash

ls ~/.ssh/id_*.pub
  • 如果提示 No such file or directory,说明没有密钥,执行生成命令。
  • 如果存在 id_ed25519.pub,可以直接跳到第 2 步。

生成新密钥(推荐 Ed25519 算法,比 RSA 更快更安全)

bash

ssh-keygen -t ed25519 -C "your_email@example.com"
  • 提示 Enter file in which to save the key:直接按回车(使用默认路径 ~/.ssh/id_ed25519)。
  • 提示 Enter passphrase(密钥密码)强烈建议设置(比如 4 位数的简单密码)。这是为了万一私钥泄露,对方也无法直接使用。如果不想每次登录都输两遍密码,后续可以配合 macOS 钥匙串自动解锁。

第 2 步:将公钥上传至 Ubuntu 服务器(二选一)

方法 A(最推荐):使用 ssh-copy-id 工具

这是最安全、最省事的方法,直接在 Mac 终端执行:

bash

ssh-copy-id username@你的Ubuntu_IP地址
  • 例如:ssh-copy-id root@192.168.1.100
  • 系统会提示输入 Ubuntu 服务器上该用户的登录密码,输入后公钥会自动写入服务器的 ~/.ssh/authorized_keys 文件。

方法 B(纯手动,适合 ssh-copy-id 不可用的情况):

通过管道命令手动追加:

cat ~/.ssh/id_ed25519.pub | ssh username@你的Ubuntu_IP地址 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
  • 同样会要求输入一次 Ubuntu 的登录密码。

第 3 步:修复 Ubuntu 服务端的目录权限(至关重要!)

SSH 对权限非常敏感,权限不对会导致密钥被忽略。上传完成后,建议立即登录 Ubuntu 服务器(使用刚才的密码)执行以下命令锁定权限:

bash

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
  • 700 表示只有该用户能读写执行该目录。
  • 600 表示只有该用户能读写授权文件。

第 4 步:测试免密登录

回到 Mac 的 Ghostty 终端,直接尝试连接:

bash

ssh username@你的Ubuntu_IP地址
  • 情况一:直接连上,恭喜成功!🎉
  • 情况二:提示输入密钥密码(Passphrase for key),这是你在第 1 步设置的密码,输入即可。
  • 情况三:依然提示输入 Ubuntu 的系统登录密码,说明密钥没生效,请看下面的排障。

第 5 步(可选):让 Mac 记住密钥密码(避免每次输两次)

如果你在第 1 步设置了密钥密码,不想每次 SSH 都敲一遍,可以将密钥添加进 macOS 的钥匙串:

bash

ssh-add --apple-use-keychain ~/.ssh/id_ed25519

配置后,重启电脑也只需在第一次 SSH 时输一次密码,后续自动填充。


⚠️ 常见排障(如果依然要求输密码)

  1. 检查 Ubuntu 的 SSH 服务配置:登录 Ubuntu,打开 /etc/ssh/sshd_config,确保以下三项没有被注释(且值为 yes):

    text

    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys
    PasswordAuthentication yes  (如果禁用了密码登录,调试期间先打开)
    

    修改后执行 sudo systemctl restart sshd 重启服务。

  2. 检查服务器上的文件所有权:确保 ~/.ssh 目录所属用户与你登录的用户一致,执行:

    bash

    chown -R 你的用户名:你的用户名 ~/.ssh
    
  3. 确认 IP 和用户名:检查是否不小心写错了 Ubuntu 的 IP 或用户名。

posted @ 2026-07-24 15:27  kiiou  阅读(2)  评论(0)    收藏  举报