步骤一:规划拓扑
1.1 服务器列表
客户端电脑
外网服务器
内网服务器
1.2 拓扑图
客户端电脑 外网服务器 内网服务器
1.3 拓扑图简介
内网服务器建立到外网服务器的 SSH 通道
客户端电脑通过 SSH 外网服务器连接到内网服务器
内网服务器就算没有公网 IP 地址也能被 SSH 上
步骤二:系统环境要求
1) 所有服务器的系统都需要是 Linux 版本
2) 所有服务器都要关闭防火墙
3) 内网服务器要能够 ping 通外网服务器
4) 客户端电脑要能够 ping 通外网服务器
步骤三:创建用于 SSH 内网穿透的用户
3.1 创建用于 SSH 内网穿透的用户
(分别在内网服务器和外网服务器上执行以下步骤)
# useradd <user for intranet penetration>
3.2 给用于 SSH 内网穿透的用户设置密码
(分别在内网服务器和外网服务器上执行以下步骤)
# passwd <user for intranet penetration>
步骤四:创建用于内 SSH 内网穿透的 SSH 密钥
4.1 进入到用户
(分别在内网服务器和外网服务器上执行以下步骤)
# su - <user for intranet penetration>
4.2 创建用于内 SSH 内网穿透的 SSH 密钥
(分别在内网服务器和外网服务器上执行以下步骤)
$ ssh-keygen
4.3 退出用户
(分别在内网服务器和外网服务器上执行以下步骤)
$ exit
步骤五:让内网服务器可以无密码访问外网服务器
5.1 进入到用户
(只在内网服务器上执行以下步骤)
# su - <user for intranet penetration>
5.2 将内网服务器的公钥拷贝到外网服务器
(只在内网服务器上执行以下步骤)
$ ssh-copy-id <IP address of Internet server>
5.3 退出用户
(只在内网服务器上执行以下步骤)
$ exit
步骤六:让外网服务器可以无密码访问自己
6.1 进入到用户
(只在外网服务器上执行以下步骤)
# su - <user for intranet penetration>
6.2 将内网服务器的公钥拷贝到外网服务器
(只在外网服务器上执行以下步骤)
$ ssh-copy-id 127.0.0.1
6.3 退出用户
(只在外网服务器上执行以下步骤)
$ exit
步骤七:实现内网服务器到外网服务器的 SSH 内网穿透
7.1 实现内网服务器到外网服务器的 SSH 通道
# su - <user for intranet penetration>
$ ssh -X -fCNR 11000:localhost:22 <IP address of Internet server>
(补充:这里以使用用于内网穿透的用户将内网服务器的 22 端口影射到外网服务器的 11000 端口为例)
(
注意:如果在内网服务器和外网服务器上创建的用于 SSH 内网穿透的用户名称不一样,则需要在最后 SSH 时添加上外网服务器上用于 SSH 的用户名
# su - <user for intranet penetration>
$ ssh -X -fCNR 11000:localhost:22 <user for intranet penetration>@<IP address of Internet server>
)
或者:
# ps -aux | grep -v grep | grep "11000:localhost:22 <IP address of Internet server>" &> /dev/null || su - <user for intranet penetration> -c 'ssh -X -fCNR 11000:localhost:22 <IP address of Internet server>'
(
注意:如果在内网服务器和外网服务器上创建的用于 SSH 内网穿透的用户名称不一样,则需要在最后 SSH 时添加上外网服务器上用于 SSH 的用户名
# ps -aux | grep -v grep | grep "11000:localhost:22 <IP address of Internet server>" &> /dev/null || su - <user for intranet penetration> -c 'ssh -X -fCNR 11000:localhost:22 <user for intranet penetration>@<IP address of Internet server>'
)
(补充:这里以使用用于内网穿透的用户将内网服务器的 22 端口影射到外网服务器的 11000 端口为例)
7.2 实现外网服务器 SSH 端口的影射
# su - <user for intranet penetration>
$ ssh -X -fCNL *:10000:localhost:11000 localhost
或者:
# ps -aux | grep -v grep | grep "*:10000:localhost:11000 localhost" || su - <user for intranet penetration> -c 'ssh -X -fCNL *:10000:localhost:11000 localhost'
(补充:这里以使用用于内网穿透的用户将外网服务器的 10000 端口影射到外网服务器的 11000 端口为例)
步骤八:客户端电脑使用 SSH 外网穿透
# ssh -p 10000 <user for intranet penetration>@<IP address of Internet server>
(补充:SSH 成功后,客户端电脑就可以直接 SSH 到内网服务器中了)