这是脚本socatscript.sh的实现
#!/bin/bashSOCKDIR=$(mktemp -d)SOCKF=${SOCKDIR}/usockSESSION_NAME=${1:-socatSession}WINDOW_NAME=${2:-socatWindown}# create session and windowtmux has-session -t $SESSION_NAMEif [[ $? -eq 1 ]];thentmux new -s $SESSION_NAME -n $WINDOW_NAME -d "socat file:`tty`,raw,echo=0 exec:'ncat -lk 9998'"fi# split windown 0tmux split-window -h -t 0 "socat file:`tty`,raw,echo=0 UNIX-LISTEN:${SOCKF},umask=0077"tmux select-pane -t 0tmux select-layout -t $WINDOW_NAME main-horizontaltmux resize-pane -t 0 -y 2# Wait for socketwhile test ! -e ${SOCKF} ; do sleep 1 ; donewhile ! $(ncat -z localhost 9998) ;do sleep 1; done;# Use socat to ship data between the unix socket and STDIO.socat -U STDOUT TCP:localhost:9998 &exec socat STDIO UNIX-CONNECT:${SOCKF}
主要功能是,每当有一个反向Shell连接时,在tmux上新建一个分屏,并将反向Shell显示在这个新建的分屏上,同时,提供一个特殊的分屏(最上面那个),在这个分屏上的输入的命令,会转发到各个反向Shell里 。
如果你发现反向Shell里的文字不能满屏显示,需要通过 stty rows 63 columns 204 重新设置一下当前tty的显示宽高 。
并且,如果你有ssh机器的权限,同时也想使用这种tmux分屏的方式执行命令,只需要将bash更换成ssh即可,如下:
# 1.开发机上监听nohup socat tcp-listen:9999,bind=0.0.0.0,reuseaddr,fork exec:'bash socatscript.sh' &# 2.开发机上,使用ssh连接到多个机器nohup socat exec:'sshpass -p "xxx" ssh root@192.168.0.10',pty,stderr,setsid,sigint,sane tcp:localhost:9999 &# 3.进入tmux分屏界面tmux a -t socatSession
是不是很爽,连ansible也可以不用装了!
总结socat命令非常的强大,值得好好的研究一翻,同时当你研究成功后,会发现自己对各种概念的理解,又上升了一步 。
【使用socat反向Shell多台机器】
推荐阅读
- html渲染和模板的使用
- 在Vue3中使用全局的函数
- Java 工程师相见恨晚的神兵利器和使用技巧
- nginx反向代理后,刷新页面无法访问,404错误,解决方法
- 推荐四把电动剃须刀使用
- 大学生|大学生将简历制成使用说明书,月薪6000开启,网友:不把自己当人
- PING命令的使用,如何ping大小包,ping 32字节,ping 65500字节
- SQL如何删除重复数据
- 适用于刚买mac的同学 MAC小白使用小常识
- 壁挂炉使用方法是什么?