反向shell ssh隧道,打通局域网机器与外网的墙壁
最新了解到的,方法二的进阶,更方便:
首先需要在公网IP的这台机器上配置ssh服务, 使能其端口转发:
sudo vi /etc/ssh/sshd_config
添加如下行:
GatewayPorts yes
重启sshd生效:
sudo service ssh restart
ssh-copy-id serveruser@serverIp
建立自动重连的ssh反向隧道
autossh -M 6334 -fNR 6333:localhost:22 ServerUser@Server
任意主机
ssh clientuser@serverIp -p 6333
最近工作需求要在办公室能够控制远程客户端部署的linux机器,实现远程debug,但是客户端机器深处内部局域网,没有对外IP也没法端口映射,于是想到了反向隧道,总结一下方法,主要有以下两种:
1、反向shell简单方便,但是连上客户端后操作不如ssh方便;
2、反向ssh隧道,部署稍微麻烦,但是连上后操作如同本地命令行,爽!
**reverse shell**
第一步,服务器端先监听本地端口
nc -n -vv -l -p 25566
第二步,本地电脑端将bash通过tcp流的方式发送到远程服务端
/bin/bash -i > /dev/tcp/dev.ray.com/25566 0<&1 2>&1
**reverse ssh**
b机器:
>先创建ssh密钥:
cd ~/.ssh
>执行下面命令,出现选择保存文件可密码提示的时候,一路回车即可
ssh-keygen -t rsa
----->Choose no passphrase when asked and accept the default filename is OK
>密钥创建成功后,上传公钥到办公室服务器上面:
ssh-copy-id ray@www.ray.com
>然后就可以免密ssh连上办公室服务器了,这个最好是在办公室创建一个权限低的用户,专门用来做反向ssh,安全!!!!
运行下面的命令,将本地bash推送到办公室服务器端的unusedPort,端口号指定一个没用的就好
ssh -N -R <unusedPort>:localhost:22 serverUser@serverIP Or serverUrl
办公室服务端机器:
>运行下面的命令,连接本地的上面指定的unusedPort,就转发到客户端的bash了,任性debug吧!:
ssh -l <clientHost UserName> -p <sameUnusedPort> localhost
**note**
> 将上面的命令组织后,写成脚本,并将脚本加入crontab 中定时循环运行,即可随时随地,远程debug客户端啦~~~~
> crontab -e ,定时任务添加一下~~~~~
**reference**
https://www.tunnelsup.com/raspberry-pi-phoning-home-using-a-reverse-remote-ssh-tunnel/
https://www.tunnelsup.com/ssh-without-password/
https://null-byte.wonderhowto.com/how-to/create-reverse-shell-remotely-execute-root-commands-over-any-open-port-using-netcat-bash-0132658/