利用SSH反向代理,实现对局域网内服务器的访问

      局域网里有台服务器,在路由器上把某个端口映射到路由器的公网IP上,出差在外时可以通过路由器的公网IP:端口获取局域网服务器的文件。最近不知为何,这招不灵了。通过研究,用SSH的反向代理,通过一台公网服务器中转桥接,实现了对局域网内服务器的访问。

基本信息:

  •       公网服务器A的IP地址是170.77.149.2(这只是举例,真实的IP当然不是这个)。
  •       局域网服务器B的IP地址是192.168.1.8。
  •       配置电脑C是笔记本电脑,暂时使用与B同网段的局域网IP:192.168.1.5。电脑是64位wind7系统,安装了SecureCRT.exe软件,软件版本是6.5.3。
  •      A和B服务器是64位centos7.9版本系统,sshd版本是OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017。

第一步:配置A、B两台服务器,使得可以免输入用户名密码就可以ssh登录。

(一)、两台服务器,都开启sshd服务器,并且都设置为密钥登录模式。

1、在A、B服务器上分别执行命令制作密钥对。输入以下命令后,连按三下回车,用默认的路径和无解锁密码生成密钥对:

[root@host ~]$ ssh-keygen

自动在/root/.ssh/目录生成两个文件,id_rsa是私钥,id_rsa.pub是公钥。公钥需要拷贝到服务器指定目录,并重命名为指定文件名。私钥要下载到C电脑给SecureCRT使用。

2、在A、B服务器上安装公钥:
[root@host ~]$ cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
[root@host ~]$ chmod 600 /root/.ssh/authorized_keys
[root@host ~]$ chmod 700 /root/.ssh

3、在A、B服务器上设置sshd服务端,打开密钥登录功能:
[root@host ~]$ vi /etc/ssh/sshd_config,在文件编辑界面里进行如下设置:

GatewayPorts yes
RSAAuthentication yes
PubkeyAuthentication yes
PermitRootLogin yes  #允许root用户通过ssh登录
PasswordAuthentication no  #禁用密码登录

4、在A、B服务器上重启sshd服务
[root@host ~]$ systemctl restart sshd.service

(二)、配置SecureCRT.exe软件,分别通过ssh2连接A、B服务器。

1、把A、B服务器的私钥文件id_rsa下载到C电脑任意目录。

2、在C电脑运行SecureCRT.exe软件,点击“文件”->“连接”,打开连接管理对话框。在对话框里点“新建会话”,SecureCRT协议选择“SSH2”,主机名填B服务器的IP地址,端口填22,用户名填root,SecureFX协议选择“SFTP”,鉴权只留“公钥”打对勾。如下图所示:

 选中“公钥”,点击对话框中的“属性”,在弹出对话框里选择从服务器下载的id_rsa私钥文件(注意,ssh客户端使用的是私钥,而不是公钥。SecureCRT界面写“会话公钥设置”,比较容易误导人)。如下图所示:

 点“确定”保存配置参数后,就可以用SecureCRT登录到服务器sshd控制台了。如下图所示:

点击SecureCRT的SecureFX图标,打开SFTP对话框,可以上传或者下载文件。如下图所示:

 

 重复第一步的(二)步骤,主机地址填上A服务器的IP地址,密钥选择A服务器的私钥文件,使得SecureCRT可以通过ssh2连接到A服务器。

第二步:配置B服务器ssh客户端,使得在B上用命令行的ssh客户端可以登录到A的sshd控制台。

1、在C电脑上,打开第一步配置好的SFTP软件,把A服务器的id_rsa私钥文件上传到B服务器的/root/目录。然后在B服务ssh控制台运行以下命令把它拷贝到正确的目录。

[root@host ~]$ mv /root/id_rsa /root/.ssh/id_rsa  #因为.ssh是隐藏目录,SFTP软件看不到,所以要分两步
[root@host ~]$ chmod 600 /root/.ssh/id_rsa

2、在B服务器上编辑设置ssh客户端配置文件:

[root@host ~]$ vi /etc/ssh/ssh_config,在文件编辑界面里把下面这行配置前的#号去掉:
IdentityFile ~/.ssh/id_rsa

3、在B服务器上运行以下命令测试用B的命令行ssh客户端连接A服务器的sshd。看到root@后面变成A服务器的主机名,就说明ssh连接成功了:

[root@host ~]ssh -p 22 root@170.77.149.2

4、测试完后,运行以下命令,退出A的sshd控制台,返回到B的sshd控制台。

[root@host ~]exit

第三步:配置ssh反向代理。

1、在B服务器上运行以下命令,通过ssh2连接上A服务器,并让A服务器启动ssh反向代理:

[root@host ~]ssh -CNfR 8822:127.0.0.1:22 root@170.77.149.2

#命令参数说明
-f 后台执行ssh指令
-C 允许压缩数据
-N 不执行远程指令
-R 将远程主机(A服务器)的某个端口(8822)转发到本地主机(B服务器)指定的端口(22)

2、在A服务器上运行以下命令,如果看到sshd有在侦听8822的tcp端口,说明ssh反向代理启动成功:

[root@host ~]netstat -anp|grep 8822

3、设置B服务器开机自启动ssh反向代理,在B服务器上运行下面命令:

[root@host ~]$chmod +x /etc/rc.d/rc.local  #给文件加上可执行权限

[root@host ~]$ vi /etc/rc.d/rc.local,在文件最后加上一行:
/usr/bin/ssh -CNfR 8822:127.0.0.1:22 root@170.77.149.2

第四步:配置SecureCRT.exe软件,使得C可以通过A连接到B的sshd控制台。

1、 重复第一步的(二)步骤,主机IP填A服务器的IP地址,端口填第三步第1条命令里输入的端口(8822)。

2、密钥选择B服务器的私钥文件。

至此,配置全部完成。C电脑无论在哪里,使用什么IP地址,都可以打开SecureCRT软件,通过有公网IP地址的A服务器连接到局域网里的B服务器了。可以在B服务器的sshd控制台里敲命令完全控制B,也可以用SecureFX软件通过STFP协议在C和B之间传文件。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值