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 支持分屏、标签、快捷键,开发体验更丝滑。
- 可扩展性强:还能搭配
tmux
、zellij
实现终端复用,进一步提升生产力。
其实这里的 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 。