如果需要在外网远程登录到内网的主机,就需要反向代理,我们可以使用ssh的端口转发功能来实现反向代理,从而在外网登录到内网主机
要实现反向代理,需要一台有公网ip的主机,为了描述方便,我们称需要远程登录的那台主机为内网主机,用于做代理的有公网ip的那台服务器为外网主机,此外的称为其他主机。我们想要实现的是其他主机能够远程登录到内网主机。
在内网主机上使用ssh开启远程转发
选项说明:
-
用于登录远程主机
-
指定将外网主机端口数据转发到本机,后面需要紧跟参数
-
注意只有在外网主机的ssh配置中启用了才会生效,否则外网主机只会监听其回环地址的对应端口。另外,参数可以省略,默认为本地回环地址
-
指定ssh不执行任何命令
-
指定ssh后台运行
例子
该例子中将外网主机的5022端口数据转发到本机(内网主机)的22端口,省略了外网主机的绑定地址,其默认为
需要被反向代理的内网主机在上述上开启ssh-server服务 输入以下命令查看是否开启服务
选项说明:
- -t 表示查看tcp
- -l 表示查看监听端口
- -n 表示以数字方式显示端口号
- -p 表示显示监听对应端口的进程信息(pid/进程名)
如果有输出结果表示ssh服务已经开启,下面的结果显示ssh在tcp的22号端口开启了服务;如果没有任何输出表示ssh服务没有开启。需要安装或者启动服务。
在外网主机上使用ssh连接到转发端口即可连接到内网主机
到这一步只有外网主机上可以连接到内网主机,其他主机还是不能够通过外网主机的转发端口连接到内网主机,需要对外网主机的ssh服务进行配置。
在外网主机的sshd配置文件中设置为,然后在内网主机上使用ssh开启远程转发时指定为或者或者省略即可。
sshd的配置文件一般在
编辑, 把这一项的注释去掉,改成,然后重启
以下是的manpage中相关的设置项,可以看到后面两个默认都是,无需专门设置
如果外网主机使用的是云服务器(比如阿里云),还需要调节防火墙设置,把转发端口添加到防火墙白名单,否则其他主机无法连接到转发端口
如果ssh因为某些原因断开了连接,代理服务就无法使用了。这时就需要使用定时对转发端口进行检查,如果连接断开就重新启动ssh建立连接,从而保证服务的可用性。
选项说明:
- 表示让后台运行(退出终端也会继续运行)
- 表示开启另外的端口转发(会占用本地和号端口以及远程主机的号端口)用于检查ssh是否正常运行
- 就是远程转发的那一小节中ssh使用的选项和参数,注意不会传给ssh
例子
使用密钥方式登录可以获得更高的安全性并且不需要输入密码,因此推荐大家使用密钥登录。 步骤如下:
- 使用生成密钥对,包括一个和, 默认在文件夹里
- 使用将公钥()复制到远程主机中(需要验证密码)或者手动将里的内容复制到远程主机的文件中
- 然后就可以不用输密码登录了
建议在远程主机的文件中将选项设置为禁止直接使用口令(password)登录,以提高安全性,特别是在口令比较弱的时候。
ssh
sshd_config