openwrt 实现ssh 反向隧道

1 测试反向隧道

A机器在内网, B机器在外网,B无法直接访问A。

1.从A机器上发起SSH连接到B机器上 ,建立反向连接隧道
ssh -v -NfR 3999:localhost:22 [email protected]
-f 表示后台执行
-N 表示不执行任何命令
-R 建立反向隧道 listen-port:host:port 指派远程上的 port 到本地地址上的 port。

3999 A机器用于建立反向隧道的端口,只要端口没被使用, 可以随意选择
localhost A机器的localhost
22 B机器的ssh端口

这里需要手动输入B机器ssh的密码, 可以使用免密码登陆。

2.在B机器上发起ssh连接
ssh localhost -p 3999
-p 表示指定目标机器的端口
localhost  A机器的localhost
3999 目标机器的端口, 一定要和A机器上用于建立反向隧道的端口号一致。

这里需要输入A机器的ssh登陆密码

A到B的ssh反向隧道建立之后,A上的本地3999端口就被转发到B的22端口了,
上面这个ssh命令就建立了从A到B:22的连接

实际使用中, 我们可能需要A机器建立连接时不需要输入密码,所以要用到ssh免密码登陆。

2 测试免密码登陆

    SSH 密钥对总是成双出现的,一把公钥,一把私钥。公钥可以自由的放在您所需要连接的 SSH 服务器上,而私钥必须稳妥的保管好。所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。 登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的, 直接允许登录 shell,不再要求密码。这样子,我们即可保证了整个登录过程的安全,也不会受到中间人攻击。

openwrt上可能装有两个ssh服务, 一个是openssh,一个是dropbear(轻量级的ssh服务)。所以生成公钥步骤不一样。

dropbear:

rm -rf ~/.ssh/known_hosts
rm -rf /etc/dropbear/dropbear_dss_host_key
rm -rf /etc/dropbear/dropbear_rsa_host_key

#重新建立公钥文件
dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key

#生成公钥Key
dropbearkey -y -f /etc/dropbear/dropbear_rsa_host_key > /etc/dropbear/authorized_keys-1

vim /etc/dropbear/authorized_keys-1#删除第一行和第三行


#把authorized_keys-1 复制到服务器上,用scp工具或者其他

这里我用scp工具拷贝到服务器的tmp目录下.

如果服务器端也是用dropbear,将public key增加到/etc/dropbear/

cat /tmp/authorized_keys-1 >> /etc/dropbear/authorized_keys


如果服务器端用的是openssh, 将public key增加到~/.ssh/authorized_keys

cat /tmp/authorized_keys-1 >> ~/.ssh/authorized_keys


重启ssh服务端


客户端发起连接, 如果前面步骤没错的话, 这里就可以不用输密码,直接连接上了。

ssh  -i /etc/dropbear/dropbear_rsa_host_key  [email protected] 

-i 指定加密方式

root 目标机器的登陆用户名

20.1.178.201 目标机器的ip地址


openssh:

# 生成公钥, 一直回车, 不用输密码

ssh-keygen -t rsa


命令执行完会在~/.ssh/ 目录下生成 rsa_id rsa_id.pub 文件,  .pub文件就是公钥。


#将公钥拷贝到服务器上, 步骤和dropbear一致。

拷贝完成之后, 重启ssh服务端,


回到客户端机器发起连接, 如果前面配置没错的话, 这里就可以连接上了

ssh -i ~/.ssh/id_rsa [email protected]

3 合并


dropbear:
ssh -f -i /etc/dropbear/dropbear_rsa_host_key  -N -R 3999:localhost:22 [email protected]


openssh:
ssh -f -i /root/.ssh/id_rsa  -N -R 3999:localhost:22 [email protected]


4利用autossh 保持连接

由于网络原因, ssh可能会断开, 需要在客户端 用autossh来检测ssh断开之后, 重新发起连接。

在 autossh 配置文件中加入配置信息,根据客户端是什么版本选择什么命令
/etc/config/autossh

config autossh
 option ssh '-f -i /etc/dropbear/dropbear_rsa_host_key  -N -R 3999:localhost:22 [email protected]'
 option gatetime '0'
 option monitorport '20000'
 option poll '600'

你可能感兴趣的:(学习笔记,openwrt,ssh,反向隧道)