@ -17,19 +17,19 @@ tags: [网络, SSH, 指南]
假如我有一台电脑在家,然后我还租了一个垃圾云服务器,服务器的性能很差但是家里的电脑性能很好。假如有一天我想在外面去玩我的电脑要怎么办呢?
一般来说家里的电脑都是在内网之中,而服务器都是在公网,任何一个地方都能访问,现在我如果想访问家里的电脑直接连难度很大,几乎是做不到的对吧,于是这时候我们可以让家里的电脑去连服务器,这样我们就有一条链路连接到家里的电脑了,然后我们再用别的设备去连服务器,这样我们就能间接访问我们的电脑了。
具体要怎么做呢? 很简单, 用SSH就能解决这个问题, 首先一般服务器上都装的是Linux系统, 一般都是自带OpenSSH的, 而且还是SSH服务端, 现在的Windows 10也是默认自带OpenSSH的, 只不过是客户端。所以首先我们要做的就是用家里的电脑去连服务器。这时候的连接不能直接SSH连过去, 普通的连没有任何作用, 只是登录到远程服务器上了而已, 我们必须要加上一些参数, 就像这样:
```
```shell
ssh -R 3389:127.0.0.1:3389 root@remote-ip
```
执行这条指令之后系统仍然会正常的去连接到远程服务器上,但是你如果执行一下`netstat -nlp`的话, 就可以发现SSH在本地也监听了一个3389的端口。不过默认的配置下SSH只会在服务器上映射这个端口, 在服务器外是连不上的, 另外如果说我只想穿透而不想打开服务器终端要该怎么办呢?
首先默认不登录终端这个方法很简单,加点参数就可以,就像这样:
```
```shell
ssh -CfNR 3389:127.0.0.1:3389 root@remote-ip
```
这样启动穿透之后就不会在家里的电脑上一直开着服务器终端了,只会有一个黑框而已,当然因为用了`-f`参数, 你即使把黑框关了也不会影响。另外还有就是映射到服务器外这个问题, 其实这个问题也很好解决, 在sshd配置文件里把`GatewayPorts no`改成`GatewayPorts yes`,设置好了之后别忘了在服务器的防火墙和服务器托管商的防火墙那里放行端口。
## 端口映射
假如上面的穿透你设置好了, 但是你说你不知道sshd配置文件在哪里? 防火墙关不掉? 服务器不是你的? 好家伙, 那内网穿透还搞什么? 没关系, SSH比你想象的要厉害, 假如你没办法开服务器的端口, 那你可以把服务器上面的端口映射到本机上。
那么现在内网穿透已经搞好了,但是由于各种各样的原因你访问不到服务器的端口,这时候你在外面,可以在外面用电脑执行以下命令:
```
```shell
ssh -CfNL 3390:127.0.0.1:3389 root@remote-ip
```
这样一波操作, 你家里的那台电脑上的3389端口就被映射到了你现在用的电脑上的3390端口了, 当然效率很低这个没办法, 毕竟SSH这些功能没有完全流行起来也是因为它的效率确实低, 而且还容易断, 也没个自带的断线重连……
@ -37,7 +37,7 @@ ssh -CfNL 3390:127.0.0.1:3389 root@remote-ip
虽然说我现在很想吐槽一下SSH并且想要赶紧说说它的一些上位替代, 不过我还是先把所有的SSH厉害的功能讲完吧。
SSH更厉害的功能就是随手开代理, 又叫做动态端口映射, 一般来说如果想要在服务器上配置一个代理很麻烦而且也很费时间, 但是如果用SSH隧道开一个代理就只用一条命令, 而且还不需要在服务器上做任何配置, 真的是非常的方便。
具体是什么命令呢?很简单,就是这样:
```
```shell
ssh -CfND 127.0.0.1:1080 root@remote-ip
```
执行这条命令之后就会在本机开一个监听地址为`127.0.0.1:1080`的socks5代理, 你可以使用Proxifier之类的socks5客户端去连接它, 然后就能直接通过这个代理用服务器上网了。假如你还想把这个代理共享给其他同在局域网的人用, 可以把`127.0.0.1`改成`0.0.0.0`并且加一个`-g`的参数,这样同网络的人也就可以通过你的电脑连接到隧道上了。