背景
从 Windows 笔记本更换到 MacBook,需要迁移远程连接配置,Windows 上使用的是 Xshell(参见【教程】Windows下 Xshell 连接跳板机和开发机),Mac 看大家推荐比较多的是 iTerm2,遂装之。
远程连接需求:通过密钥连接跳板机,再从跳板机通过密钥连接开发机。
iTerm2 配置步骤
- Step1:在
~/.ssh/
目录下新建config
文件,内容格式如下:
Host jumper # 给跳板机取个名字
HostName xxx.xxx.com # 填跳板机的IP
User zhangsan # 填登陆跳板机的用户名
port 22 # 填跳板机端口号
IdentityFile /Users/xxx/xxx/ssh/id_rsa # 填登陆跳板机所使用的密钥文件的本机路径
Host dev_name # 给开发机取个名字
HostName 12.3.456.789 # 填开发机的IP
PermitLocalCommand yes
User lisi # 填登陆开发机的用户名
port 22 # 填开发机端口号
IdentityFile /Users/xxx/xxx/ssh/another_id_rsa # 填登陆开发机所使用的密钥文件的本机路径
ProxyCommand ssh jumper -W %h:%p # !!重要!!
ServerAliveInterval 10
在 iTerm2 终端测试下是否生效:
cd ~
ssh dev # 登陆跳板机
cd ~
ssh dev_name # 登陆开发机
如果登陆跳板机出现报错,常见情况是:密钥文件路径有没有误、格式有没有问题;如果需要内网才能访问,确认有没有连接内网或挂VPN;
如果登陆开发机有问题,请移步本文【问题排查与处理】;
都没有问题再进行下一步。
- Step2:如果不想每次都通过命令行登陆,可以配置 iTerm2 Profiles:
- Profiles -> Open Profiles… -> Edit Profiles…
- 点击 + 新建一个 Profile,
- 给 Profile 取个名字,比如跳板机就叫 jumper,开发机就叫 dev;
- 在 Send text at start 处填 Step1 中的连接命令,例如连接跳板机就是
ssh jumper
,连接开发机就是ssh dev_name
。
- Profiles -> Open Profiles… -> Edit Profiles…
- 设置完成就会出现在 Profiles 下,点击即可连接:
问题排查与处理
报错问题1:Permission denied (publickey)
我一开始直接把 Windows 电脑上 VScode 使用的 config 文件复制过来,跳板机的配置一样,开发机配置关键的 ProxyCommand 那行不一样:
Host jumper # 给跳板机取个名字
HostName xxx.xxx.com # 填跳板机的IP
User zhangsan # 填登陆跳板机的用户名
port 22 # 填跳板机端口号
IdentityFile /Users/xxx/xxx/ssh/id_rsa # 填登陆跳板机所使用的密钥文件的本机路径
Host dev_name # 给开发机取个名字
HostName 12.3.456.789 # 填开发机的IP
User lisi # 填登陆开发机的用户名
port 22 # 填开发机端口号
IdentityFile /Users/xxx/xxx/ssh/another_id_rsa # 填登陆开发机所使用的密钥文件的本机路径
ProxyCommand ssh.exe -p 22 zhangsan@xxx.xxx.com nc %h %p # 注意这行不一样
报错如下:
zsh:1: command not found: ssh.exe
kex_exchange_identification: Connection closed by remote host
Connection closed by UNKNOWN port 65535
将最后一行的 ssh.exe
改为 ssh
:
ProxyCommand ssh -p 22 zhangsan@xxx.xxx.com nc %h %p
还是报错,如下:
zhangsan@xxx.xxx.com: Permission denied (publickey).
kex_exchange_identification: Connection closed by remote host
Connection closed by UNKNOWN port 65535
最后修改成如下之后,成功连接了:
ProxyCommand ssh jumper -W %h:%p
报错问题2:administratively prohibited
如果还是不行,出现如下报错:
channel 0: open failed: administratively prohibited: open failed
stdio forwarding failed
kex_exchange_identification: Connection closed by remote host
Connection closed by UNKNOWN port 65535
可以尝试修改成如下:
ProxyCommand ssh -p 22 jumper nc %h %p
-------- 完结 --------