问题描述
很多人肯定碰到这样一个问题:自己办公室的电脑回家之后就没法通过家里的电脑远程连接过来了。除非通过拨通×××或者其他方式先连接到公司内网。如果公司没有×××,那么我们如何通过SSH连接到公司的电脑呢?这里我们可以使用SSH反向代理
实验环境
机器编号 | IP | 用户名 | 备注 | |
| 172.16.206.131 | aaa | 目标服务器,在局域网中,可以访问 A | |
| 10.10.10.206 | bbb | 代理服务器,在外网中,无法访问 A | |
| 10.10.10.202 | 可以直接访问 B,无法直接访问 A | ||
目标
从 C 机器使用 SSH 访问 A
解决方案
在 A 机器上做到 B 机器的反向代理;在 B 机器上设置GatewayPorts yes
环境需求
每台机器上都需要 SSH 客户端
A、B 两台机器上需要 SSH 服务器端。通常是 openssh-server。
CentOS系统默认都安装了openssh-server。
实施步骤
1、在A上面建立到B的反向代理
ssh -fCNR 88:localhost:22 bbb@10.10.10.206
参数解释:-f 后台运行-C 允许压缩数据-N 不执行任何命令-R 将端口绑定到远程服务器,反向代理-L 将端口绑定到本地客户端,正向代理
命令解释:将主机A本地的22端口映射到代理服务器上的88端口上。
登录代理服务器B,查看是否启动了88端口
[root@localhost .ssh]# netstat -tunlp | grep '88' tcp 0 0 0.0.0.0:88 0.0.0.0:* LISTEN 1234/sshd tcp 0 0 :::88 :::* LISTEN 1234/sshd
2、修改代理服务器B的配置文件/etc/ssh/sshd_config
,设置GatewayPorts yes
3、测试从C服务器用SSH连接到A
root@localhost:~/.ssh# ssh -p 88 aaa@10.10.10.206 aaa@10.10.10.206's password: Last login: Fri Jun 24 14:43:01 2016 from localhost
注意:连接到A时,一定要用A主机上的账号,ip为代理服务器IP地址
SSH免密码登录
1、主机A在代理服务器B创建反向代理时,需要输入B的账户密码。为了免密码登录,可以将主机A的aaa用户公钥文件传到主机B的bbb账户authorized_keys文件中。
2、主机C通过SSH连接主机A时,也需要输入主机上的aaa用户的密码,为了免密码登录,可以将主机C上的用户的公钥传到主机A的aaa用户下的authorized_keys文件中。
Autosssh的用法
注意:要使用authssh,需要先配置ssh key的认证,将主机A的公钥传到主机B的bbb账户下
AutoSSH 的使用方法和 SSH 类似,只是它提供了断线自动连接功能,这样就不必每次重新输入命令了。而且还可以解决超时断开连接的问题。
经过测试,代理服务器B重启后,主机A上建立的反向代理连接会在主机B重启后,自动创建。
安装autossh
yum -y install autossh
用autossh创建反向代理的命令
$ autossh -M 5678 -fCNR 88:localhost:22 bbb@10.10.10.206
比之前的命令添加的一个'-M 5678'参数,负责通过'5678'端口监视连接状态,连接有问题时就会自动重连
总结
由于SSH隧道也使用了SSH加密协议,因此是不会被防火墙上的内容过滤器监控到的。也就是说一切在隧道中传输的数据都是被加密的。当然,离开隧道后的数据还是会保持自己原有的样子,没有加密的数据还是会被后续的路由设备监控到。
参考文档: