SSH内网穿透(SSH端口转发)

随笔3个月前发布 自在云凡
31 0 0

一、远程端口转发

SSH内网穿透(SSH端口转发)

 

当有一台local主机,想要访问另一台local主机C,A和C不在同一局域网,但无法访问

且有一台公网服务器,A和C都可以向B发起SSH连接

可做以下操作实现A->C,即A访问C

C发起远程端口转发命令,实现将C和B两个端口之间的流量转发:

ssh -R serverB_port:localhost:localC_port  serverB_username@serverB_ip

例如:ssh -R 8800:localhost:22  serverB_username@serverB_ip

注:localhost可换成127.0.0.1

 这样A通过8800这个端口连上公网服务器B,即可访问localC

ssh -p 8800 serverB_username@serverB_ip

 

二、使用SSH公钥认证进行SSH内网穿透的一般步骤

1、生成密钥对:

在本地计算机上生成SSH密钥对,包括公钥和私钥。可以使用以下命令生成RSA密钥对:

ssh-keygen -t rsa -b 4096
回车(默认即可)
回车
该命令将生成一个名为 id_rsa 的私钥文件和一个名为 id_rsa.pub 的公钥文件。

注:任何地方使用ssh-keygen生成的秘钥对都可以使用,只有ssh-keygen生成的秘钥对才可以使用

2、将公钥添加到公网服务器上:将生成的公钥文件(id_rsa.pub)内容复制到公网服务器上的 ~/.ssh/authorized_keys 文件中。
可以使用以下命令将公钥复制到公网服务器:ssh-copy-id -i ~/.ssh/id_rsa.pub user@host(具体能否使用没有验证)

3、配置SSH服务:在公网服务器上,确保SSH服务已启用并允许通过公钥认证进行登录。
编辑公网服务器上的SSH服务器配置文件(通常是 /etc/ssh/sshd_config),确保以下配置被启用:

PubkeyAuthentication yes
保存并重启SSH服务 systemctl restart sshd

4、进行SSH内网穿透:使用以下命令在C设备上建立SSH连接并进行内网穿透:

ssh -i ~/.ssh/id_rsa -R serverB_port:localhost:localC_port serverB_username@serverB_ip
-i 是指定私钥所在的位置
-o “UserKnownHostsFile=/tmp/known_hosts” //指定known_hosts文件生成的位置
-o “StrictHostKeyChecking=no” //设置对不安全的级别

完成上述步骤后,你应该能够通过本地计算机上的指定端口访问C设备了,实现SSH内网穿透。

5、windows cmd运行命令 ssh -p serverB_port localC_username@serverB_ip ,就可访问到C设备

 

三、使用密码进行SSH内网穿透

主要根据参考https://www.lxlinux.net/13043.html 中的方法来配置。

步骤如下:

1.在公网服务器(已经安装并启动了sshd服务)上,修改/etc/ssh/sshd_config,添加一行 GatewayPorts yes 。然后重启sshd服务:systemctl restart sshd

2.找一台C设备(可连上公网),在其上运行命令ssh -l公网服务器用户名 -p 设备C端口 -qngfNTR 公网服务器端口:localhost:设备C端口 公网服务器ip -o ServerAliveInterval=10,提示输入密码时输入密码 。就完成了端口映射
3.随便找一台带有ssh客户端且能连上公网的pc机,运行命令 ssh -p 公网服务器端口 serverB_username@serverB_ip ,就可访问到C设备
4.若需要将这些操作写成代码,在程序上运行,则需要sshpass将密码带进去,实现登录
5、windows cmd运行命令 ssh -p serverB_port localC_username@serverB_ip ,就可访问到C设备

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...