首发于我的博客
https://miaotony.github.io/2019/12/21/Idea_RemoteProgramming/
欢迎来我的博客转一转呀~
转载请注明来自MiaoTony并附上上面的原文链接,谢谢!
Cause
在内网有一台服务器,能连接外网但由于没有公网 IP 而无法在外网直接访问,之前想要在上面跑程序的时候,就得通过远程桌面进行操作。虽然 Teamviewer
速度还可以,但总感觉有点不太爽……
很久以前(大概一两个月前)就在逼乎上看到过一篇文章说可以
使用vscode进行远程炼丹 (原文见 Reference #1
噫!我来兴趣了,而且其实早就想试试了,然而之前在忙别的没空折腾~~(其实现在也没空),就是前几天在配服务器环境的时候(麻烦到爆炸,最讨厌配环境了)~~,一想干脆就再折腾一下,弄好远程炼丹(编程)吧。
于是乎就这样连Linux命令都不知道几个的憨憨瞎折腾了一两天的ssh,终于实现了远程炼丹,贼有成就感嘻嘻嘻。
其中遇到了一些奇怪的问题,简单记录一下,也方便我忘了再回来看看吧。
时间有限,VSCode的部分就大概提一下思路,重点是ssh
的部分吧……
Guidance for ssh
不妨假设如下,记清楚了噢,后面频繁用到的。
computer | IP/address | info |
---|---|---|
内网服务器A | 172.x.x.x | 可以访问外网,但外网不能直接访问A |
公网服务器B | test.com | 可以访问外网,也可被外网访问 |
能够联网的主机C | - | 想要在C上对A进行访问 |
内网服务器A上的设置
A设置反向代理到B的 port1 端口
工作原理:
1、本地主机和远程主机建立连接;
2、远程主机上分配了一个 socket 侦听 port 端口;
3、远程端口上有了连接, 该连接就经过安全通道转向本机的端口。备注:root 登录远程主机才能转发特权端口。
ssh -fCNR <port1>:localhost:22 usr_b@test.com -p 22
-R port1:host:port2 将远程机器的端口映射到本地。port1是公网服务器B的端口,host为本地A的IP,port2是A要映射到公网的端口。
usr_b@test.com
用户名@服务器B地址,表示连接到B,以用户usr_b
登录。当然test.com
也可以是IP地址啦。
-f SSH客户端在后台运行
-C 允许压缩
-g 允许远程主机可远程访问,这里有坑。 (但autossh
没有这个选项所以应该影响不大)
-N Do not execute a shell or command. 不执行脚本或命令,通常与-f连用。
-p 22 表示指定连接到B的22端口,默认就是22啦,如果不是的话设置成B的ssh端口。
注意一下,*(网上说)*这里有个坑,-g还需要在公网服务器B做下面的设置,设置完后再重启服务。