Mac SSH功能,配合 Vim 编辑器对编程十分有帮助


前言

本文整合自网络教程(原文链接:https://blog.csdn.net/xcg132566/article/details/78797339),并补充了 2026 年 macOS SSH / Vim 的现代实践。

macOS 内置 OpenSSH 客户端和 Vim 编辑器,无需额外安装就能远程管理 Linux 服务器。这套组合是程序员日常工作的”标配”——尤其在运维、远程开发、跨平台协作场景下。

本文从基础 SSH 连接讲起,覆盖 SSH 密钥认证、scp 文件传输、Vim 编辑器配置、SSH 高级用法(隧道 / 代理),形成完整的 macOS + Linux 远程开发工作流。

一、SSH 基础连接

1. 密码登录

ssh username@192.168.100.100
  • username:远程主机的用户名
  • 192.168.100.100:远程主机 IP(或域名)
  • 按提示输入密码即可登录

⚠️ macOS 第一次连接陌生主机会提示:

The authenticity of host '192.168.100.100' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)?

输入 yes 后会写入 ~/.ssh/known_hosts,下次连接不再提示。

2. 指定端口

SSH 默认端口是 22。如果服务器改了端口:

ssh -p 2222 username@192.168.100.100

3. 指定私钥登录

如果服务器配置了公钥认证:

ssh -i ~/.ssh/id_rsa username@192.168.100.100

4. 查看当前登录的用户

ssh user@server who

或者登录后用 who 命令查看当前所有登录用户。

二、SSH 公钥认证(免密码登录)

密码登录每次都要输入密码,公钥认证才是日常开发的方式——生成一对密钥,把公钥放到服务器,本地用私钥登录,全程免密。

1. 生成密钥对

ssh-keygen -t ed25519 -C "your_email@example.com"

2026 年推荐用 ed25519(比 RSA 更短、更快、更安全)。如果你还在用老 RSA:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

按提示设置:

  • 文件路径:直接回车用默认 ~/.ssh/id_ed25519
  • 密码:建议设一个密码(passphrase)—— 即使私钥泄露,攻击者也需要密码才能用

2. 上传公钥到服务器

方法 1:ssh-copy-id(最方便)

ssh-copy-id username@192.168.100.100

输入密码一次,公钥自动追加到服务器的 ~/.ssh/authorized_keys

方法 2:手动复制

# macOS 本地
cat ~/.ssh/id_ed25519.pub | ssh username@192.168.100.100 \
  "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

方法 3:直接编辑

mac上:

cat ~/.ssh/id_ed25519.pub
# 复制输出内容

# 登录服务器后
ssh username@192.168.100.100
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# 把公钥内容粘贴进去
echo "ssh-ed25519 AAAA... your_email@example.com" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

⚠️ 关键~/.ssh 必须是 700 权限,authorized_keys 必须是 600。否则 SSH 会拒绝使用公钥认证。

3. 测试免密登录

ssh username@192.168.100.100
# 不再要求输入密码

4. SSH Config 简化命令

如果你经常连多台服务器,可以配 ~/.ssh/config

Host myserver
    HostName 192.168.100.100
    User username
    Port 22
    IdentityFile ~/.ssh/id_ed25519

Host prod
    HostName prod.example.com
    User deploy
    Port 2222
    IdentityFile ~/.ssh/work_key

之后直接 ssh myserverssh prod,不用记 IP / 端口 / 用户名。

三、scp 文件传输

scp = SSH Copy,本质是在 SSH 加密通道上传输文件。

1. 下载:服务器 → 本地

scp username@servername:/path/filename /local/path

示例:

scp root@123.207.170.40:/root/test.txt /Users/mac/Desktop
# 把服务器的 /root/test.txt 下载到本地桌面

2. 上传:本地 → 服务器

scp /local/path/filename username@servername:/remote/path

示例:

scp /Users/mac/Desktop/test.txt root@123.207.170.40:/root/

3. 递归传输整个目录

-r 参数:

# 下载整个目录
scp -r root@server:/root/folder /local/

# 上传整个目录
scp -r ./local_folder root@server:/root/

4. 指定端口

scp -P 2222 file.txt user@server:/path
# ⚠️ scp 用大写 -P,ssh 用小写 -p

5. 保留文件属性

scp -p file.txt user@server:/path
# 保留时间戳、权限、属主等

6. 限速

scp -l 1000 file.txt user@server:/path
# 限制 1000 Kbit/s(用于慢速网络避免占满带宽)

四、Vim 编辑器基础

Vim 是 macOS / Linux 自带的文本编辑器,所有 Unix-like 系统都有。掌握 Vim 后,你在任何服务器上都能编辑文件。

1. 启动 Vim

vim filename

2. 三种模式

模式 进入方式 作用
普通模式(Normal) 启动默认 / Esc 移动光标、删除、复制、粘贴
插入模式(Insert) i / a / o 输入文本
命令行模式(Command) : 执行命令(保存、退出、查找等)

3. 必备命令

普通模式下

h j k l      左下上右(替代方向键,更快)
0           跳到行首
$           跳到行尾
gg          跳到文件首行
G           跳到文件末行
dd          删除当前行
yy          复制当前行
p           粘贴
/keyword    搜索关键字
n           下一个匹配
:N          跳到第 N 行

命令行模式下

:w           保存
:q           退出
:wq          保存并退出
:q!          强制退出(不保存)
:set nu      显示行号
:%s/old/new/g  全局替换

4. .vimrc 配置

macOS 默认 ~/.vimrc,Linux 也是 ~/.vimrc

" 显示行号
set number

" 语法高亮
syntax on

" 自动缩进
set autoindent
set smartindent

" Tab = 4 空格
set tabstop=4
set expandtab

" 显示当前模式
set showmode

" 搜索时忽略大小写
set ignorecase
set smartcase

" 中文编码
set encoding=utf-8
set fileencodings=utf-8,gbk,gb18030

5. Vim 常用插件

Vundle / vim-plug / pack:插件管理器

" ~/.vimrc 装 vim-plug
call plug#begin('~/.vim/plugged')
Plug 'vim-airline/vim-airline'
Plug 'preservim/nerdtree'
Plug 'tpope/vim-commentary'
call plug#end()

安装:curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

然后 :PlugInstall

⚠️ 服务器上慎用插件:远程服务器的 Vim 没法装插件,只用基础命令就好。

五、SSH 高级用法

1. SSH 端口转发(隧道)

本地转发(本地访问远程服务):

ssh -L 8080:remote-server:80 user@server
# 之后访问 localhost:8080 就像访问 remote-server:80

典型场景:在本地访问服务器的 MySQL / Redis / Web 服务(避开公网)。

远程转发(远程访问本地服务):

ssh -R 8080:localhost:3000 user@server
# 服务器访问 localhost:8080 就是访问你本地的 :3000

典型场景:本地开发 Web 应用,让外部用户通过服务器访问。

动态转发(SOCKS 代理)

ssh -D 1080 user@server
# 配置本地浏览器 / 应用走 SOCKS5 代理 localhost:1080
# 所有流量经 SSH 加密走服务器出去

⚠️ 这就是跳板机最简单实现——不推荐用来”翻墙”违反当地法规。

2. SSH 免密 + sudo

服务器端 visudo

username ALL=(ALL) NOPASSWD: ALL

让 sudo 也免密。慎用——只在自己的开发机用。

3. ssh-agent 转发私钥

本地有私钥,但 SSH 到中间跳板机后还想用同一私钥连其他服务器:

ssh -A user@jumpserver
# 之后从 jumpserver 跳到目标服务器时直接用本地私钥

ssh-agent 会管理内存中的私钥,私钥不会落到跳板机磁盘

macOS 上启用:

# 启动 ssh-agent(macOS 默认启用)
eval "$(ssh-agent -s)"

# 添加私钥(一次)
ssh-add ~/.ssh/id_ed25519
# 输入密码

# 之后 ssh-add -l 能看到已加载的密钥

⚠️ 2026 年 macOS Keychain 已经自动接管 ssh-agent——只要 ~/.ssh/id_ed25519 是 macOS Keychain 信任的私钥,第一次 ssh 就会自动询问是否保存到 Keychain,之后自动用。

4. SSH 多因素认证

服务器开 Google Authenticator / Yubikey:

/etc/pam.d/sshd 添加:
auth required pam_google_authenticator.so

macOS 客户端连接时多一步输 6 位 TOTP 码。

六、SSH 安全最佳实践

服务器端(/etc/ssh/sshd_config):

# 禁用密码登录(强制公钥)
PasswordAuthentication no

# 禁用 root 直接登录
PermitRootLogin prohibit-password

# 限制尝试次数
MaxAuthTries 3

# 修改默认端口(防扫描)
Port 2222

客户端:

  • ⚠️ 不要把私钥提交到 git
  • 给不同用途的服务器用不同密钥(work / personal / GitHub)
  • 私钥密码(passphrase)一定要设
  • 定期 ssh-keygen -lf ~/.ssh/id_ed25519 看本地有哪些密钥

.gitignore 加:

.ssh/id_*

(只忽略私钥,公钥 *.pub 可以提交)

七、常见问题

Q: 连接提示 “Permission denied (publickey,password)”?

99% 是 .ssh 目录权限问题:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 644 ~/.ssh/known_hosts
chmod 644 ~/.ssh/config

Q: 配了公钥还是要输密码?

服务端 sshd_config 检查:

# 必须确认
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

重启 sshd:

sudo systemctl restart sshd

Q: macOS 上 ssh-add 后重启要重新输密码?

macOS 上:

ssh-add --apple-use-keychain ~/.ssh/id_ed25519
# 添加到 Keychain,重启不丢

Q: SSH 经常断线?

服务端 sshd_config 加:

ClientAlive
Interval 60
ClientAliveCountMax 3

客户端 ~/.ssh/config 加:

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

八、完结

macOS + SSH + Vim 是程序员远程工作的三件套

  • SSH 连接服务器(公钥认证免密登录)
  • scp 传输文件
  • Vim 编辑服务器文件(基础命令够用,复杂需求用 VSCode Remote)

把这套练到不查文档就能用,远程运维能力会有质的飞跃。

记住三个核心原则:

  1. 永远用公钥认证(别再用密码)
  2. 私钥加密码 + 不入 git
  3. 服务器端禁用密码登录 + 改默认端口

文章作者: 因特吧
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 因特吧 !
  目录