平时还是用windows来搞事情,虽然配置甚至难搞,但还是可以用吧
1 对于linux来说,反向连接步骤如下:
设 A主机 内网主机 192.168.37.132 sshd 服务开在22端口
B主机 外网主机 122.10.10.10 sshd 服务开在22端口
在A主机使用如下命令
ssh -RN 1234:localhost:22 root@122.10.10.10 -p22
可简写为
ssh -NR 1234:localhost:22 root@122.10.10.10
-R listen-port:host:port 指派远程上的 port 到本地地址上的 port
建立远程SSH隧道(隧道服务端建立监听端口)
将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口.
-N 不执行远程指令,否则会出现一个B主机的shell,可以执行命令
参数详解:https://www.jianshu.com/p/5865c9c39acc
A主机执行该命令的意思是将B主机的1234端口绑定到A主机的22端口
这样我们就可以在B主机使用命令:
ss -ant
可以看到本地的127.0.0.1:1234端口已经占用了
说明ssh反向连接成功了
接下来在B主机使用如下命令即可连接处于内网的A主机
ssh user@localhost -p 1234
另外我们可以使用ssh-copy-id 命令实现公匙登录,每次就不用输入密码了。
A,B主机都各自将对方的id_rsa.pub加入自己的authorized_keys,这样A主机反向连接不需要输入密码,B主机连接A也不需要输入密码了。
不懂ssh-copy-id的话可以看看我的另一篇关于ssh免密登录的博客
2 windows作为内网服务器设置方法
windows10 现在也自带了ssh服务,如何设置见:https://blog.nowcoder.net/n/b90073b0686b41f788699f6fe56db872
其中连接部分同linux的操作一致,但是在免密登录部分需要注意
默认的sshd_config将为Administrators组中的用户检查替代的authorized_keys文件。
信息来自:https://github.com/MicrosoftDocs/windowsserverdocs/issues/1911
所以我们需要将sshd_config中最后的两行注释掉:
#Match Group administrators # AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
sshd_confing 位于C:\ProgramData\ssh