概述
- 利用跳板机上的nc做前向代理
- 随后编辑windows上的ssh config
- 用vscode实现远程调试,和穿越跳板机的文件传输
确定连接方式
- 利用nc 首先登录跳板机,输入"nc"
如果跳板机有nc就可以用这种方式登录 - 利用ssh -W 这种方式我没有配置成功,有兴趣请参考别的文章(文末)
配置ssh config(Windows)
- 打开C:/Users/[你的用户名]/.ssh/config(如果没有就新建一个)
- 输入:Host [远程服务器别名,随便起] HostName [远程服务器地址] User [远程服务器账户名] Port [远程服务器端口] ProxyCommand ssh.exe -p [跳板机端口] [跳板机地址] nc %h %p
- 上一步中的ssh.exe是在windows环境才这样写的,如果要在mac环境配置,只需要去掉.exe换成ssh
MAC
ssh config的位置在:~/.ssh/config
其他同上
我的配置文件为例
Host google_gpu_03 # 随便起
HostName 123.123.123.123 # 训练服务器IP
User user2 # 训练服务器用户名
Port 22
ProxyCommand ssh.exe -p 32200 user1@122.122.122.122 nc %h %p # 跳板机用户名和IP
vscode 登录
- 打开vscode,点击View - Command palette
- 点击Remote SSH: Connect to Host
- 选择上一步配置的远程服务器别名
- 按照提示分别输入跳板机,远程服务器的密码
- 第一次连接的时候会花几分钟时间安装vscode server,即使远程服务器没有网络也可以安装成功
(可选)配置公钥免密登录
虽然可选,但是大多数人都会这么做,因为不这样做的话每次登录要输入服务器和跳板机的密码,不方便的话就没有远程调试的意义了
- 配置从windows到跳板机的公钥
- 打开powershell,输入ssh-keygen -t rsa
- 把id_rsa.pub文件传到跳板机,并在跳板机上运行cat id_rsa.pub >> ~/.ssh/authorized_keys
- 至此,就不用输入跳板机密码了
- 配置从跳板机到远程服务器的公钥
- 跳板机输入ssh-keygen -t rsa
- 把跳板机的id_rsa.pub文件传到远程服务器,并在远程服务器上运行cat id_rsa.pub >> ~/.ssh/authorized_keys
- 【重要】把你windows的id_rsa.pub,并在远程服务器上运行上述命令
- (也就是说,所有前序机器的id_rsa.pub都要添加到最终机器上。比如说有3台机ABC,其中B是跳板机。那么A的.pub要在B跟C上分别导入一次,B的.pub要在C上导入一次,共3次)
- 至此,就不用输入远程服务器密码了
查考
- 关于ssh config的配置,我参考的是:https://www.hi-linux.com/posts/929.html
- 关于vscode,我参考:https://www.aslinwang.com/2019/06/vsc-remote-dev/
- 其他通过ssh -J连接的方法,我没有试过:https://zocodev.com/ssh-scp-over-jump-server.html
- 关于MAC可以看:https://www.jianshu.com/p/7990ca55da69