利用ssh反向连接和autossh实现外网稳定访问内网

1、准备两台或三台机器,各机器之前的网络关系为:

目的:机器A能够主动通过ssh访问机器C,或者机器B能够主动通过ssh访问机器C

2、准备工作
在机器B上安装ssh:

sudo apt-get install openssh-server

在机器C上安装ssh和autossh:

sudo apt-get install openssh-server autossh

3、ssh命令详解
反向代理

ssh -fCNR

正向代理

ssh -fCNL
-f 后台执行ssh指令
-C 允许压缩数据
-N 不执行远程指令
-R 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口
-L 将本地机(客户机)的某个端口转发到远端指定机器的指定端口
-p 指定远程主机的端口

4、在机器C进行以下操作,建立机器C到机器B的反向代理,并设置为机器C开机自启动
(1)在机器C上将建立反向代理的命令保存到脚本中,编辑脚本/etc/init.d/autossh_tunnel.sh,脚本内容如下:

#!/bin/bash
/usr/bin/autossh -fCNR 20000:localhost:22 [email protected] -i ~/.ssh/id_rsa

注,反向代理建立命令的含义:

ssh -fCNR [B机器端口]:[C机器的IP]:[C机器端口] [登陆B机器的用户名@机器B的IP]

(2)保存后,将该脚本设置为所有用户可读可写可执行:

sudo chmod -R 777 /etc/init.d/autossh_tunnel.sh

(3)将该脚本设置为开机自动执行,编辑脚本/etc/rc.local,在exit 0之前添加如下内容:

su - ubuntu -s /bin/bash /etc/init.d/autossh_tunnel.sh &

注:其中ubuntu为机器C的用户名

5、在机器C上执行以下命令生成公私钥对
注:执行以下命令,一路回车即可,提示输入密码时,不要输入。其中ubuntu为机器C的用户名。

su - ubuntu
ssh-keygen -t 'rsa'

6、在机器C上执行以下命令将机器C的公钥安装到机器B

su - ubuntu
ssh-copy-id -i ~/.ssh/id_rsa [email protected]

注:最后一步会要求输入机器B的root用户的密码

7、在机器B上执行以下命令建立正向代理

ssh -fCNL '*:10000:localhost:20000' localhost

注:
(1)如果要设置为开机自动建立正向代理,则将这条命令添加到/etc/rc.local文件的exit 0代码前。
(2)10000为本地转发端口,*表示可以接受任何IP的访问,20000为与机器C通信的数据端口,正向代理建立命令的具体含义:

ssh -fCNL *:[B机器用来转发的端口]:[B机器的IP]:[B机器端口] [登陆B机器的用户名@B机器的IP]

(3)如果机器B为一台公网租赁的服务器,则需要注意到该服务器所属的企业云官网打开端口10000和20000的安全出入规则。

8、重启机器C之后验证测试
(1)如果机器A为windows机器,则通过SSH或Xshell工具,登录IP为机器B的IP,端口为10000,用户名为机器C的登录用户名(这儿测试用的是ubuntu),密码为机器C该用户名对应的登录密码;
(2)如果机器A为linux机器,则通过命令行执行登录:

ssh -p 10000 [email protected]

注:-p指定端口,此处为机器B用来转发的端口,ubuntu为机器C的登录用户名,最后的IP为机器B的IP。
(3)在机器B上测试登录机器C,执行命令与步骤(2)一样。


 




 

猜你喜欢

转载自blog.csdn.net/maidabu/article/details/88929410