爬虫代码已复制

告别断连!用 .ssh/config + iTerm2 打造稳定顺滑的SSH体验

SSH 远程连接云服务器

因为一直有远程连接云服务器、本地虚拟化平台的之类的需要,所以 SSH 的工具从最初的 PuTTY、XShell、FinalShell,到 MobaXterm、Tabby 等都有用过,切换到 macOS 作为工作环境后,主要是以 Tabby 为主。之所以使用这些工具而不是命令行,主要是因为这些工具使用 SFTP 比较方便。

在 macOS 上连接 SSH,很多人会选择 Tabby 这样的跨平台 SSH 客户端,它界面美观、上手简单。但近期包括我在内的不少人都遇到一个烦恼:Tabby 频繁断连,甚至在长时间运行进程时直接掉线,上传一个不到30M的文件也会失败,严重影响工作效率及体验。

但在同一时间在终端使用 scp 命令连接相同的服务器上传相同的文件是没有问题的,所以可以断定是 Tabby 自身的问题。虽然终端可以直接通过命令 ssh 或 scp 进行操作,但每次输入的命令太长且重复,体验也不会太好,特别是有多台远程服务器需要管理的时候更麻烦。

于是我换了一种更稳的方案:iTerm2 + .ssh/config。 这一组合不仅稳定,而且可定制化更强,甚至能比 Tabby 更高效。 本文就来分享配置步骤和一些实用技巧。

为什么选择 iTerm2 + .ssh/config?

  • 稳定可靠:macOS 自带的 OpenSSH 功能强大,远程连接比第三方工具更稳定。
  • 高效便捷:通过 ~/.ssh/config 配置别名,避免每次输入冗长命令。
  • 功能强大:iTerm2 支持分屏、标签、快捷键,开发体验更丝滑。
  • 可扩展性强:还能搭配 tmuxzellij 实现终端复用,进一步提升生产力。

其实这里的 iterm2 不是必选项,直接使用 macOS 自带的终端也行,只是 iterm2 功能会更加强大。

配置步骤

这里的重点是要在 ~/.ssh/ 目录下配置 config 文件,如果当前目录没有 config 文件,则直接创建一个。然后打开 config 文件进行配置,常用配置内容如下:

Host myserver
    HostName 192.168.1.100
    User ubuntu
    Port 22
    IdentityFile ~/.ssh/id_rsa
  • Host 是你给这台服务器起别名,可以根据实际情况放一个易记且能区分其它服务器的名字;
  • HostName 是远程服务器的 IP 地址或域名;
  • User 是使用 SSH 登录这台服务器时用到的用户名;
  • Port 是服务器 SSH 服务的端口,默认 22,根据你服务器的实际情况配置;
  • IdentityFile 是你登录服务器的 SSH 私钥,根据你实际的密钥路径来配置;

Host 下面的配置内容要缩进,可以是空格或者制表符。也可以在配置内容里面加上以下两行,防止掉线:

  • ServerAliveInterval 60:每 60 秒发一次心跳包,防止掉线
  • ServerAliveCountMax 5:心跳失败 5 次才断开

配置好以上的内容后,就可以直接在终端或者 iterm2 中输入命令并回车:

ssh myserver # myserver 对应配置中 Host 的值

就发现已经在终端或者 iterm2 中打开了远程服务器的 SSH 连接了。需要上传文件时只需要:

scp ./localfile myserver:/tmp

这样就把当前目录的 localfile 文件上传到了该服务器的 /tmp 目录了。

常见报错

配置好之后在终端或者 iterm2 中执行 ssh myserver 命令时,有可能报以下的异常信息:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for '/Users/user/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/Users/user/.ssh/id_rsa": bad permissions
ubuntu@192.168.1.100: Permission denied (publickey).

这个报错产生的原因是 SSH 不允许密钥文件权限太宽松导致的,所以要把私钥文件设置为私有权限。执行下行命令:

# 更换为你实际的私钥文件路径
cd ~/.ssh/
chmod 600 id_rsa

把私钥文件 id_rsa 的权限设置为 600,如果还是出现 Permission denied 的问题,就把 ~/.ssh/config 文件的权限也改成 600 。