使用socat反向Shell多台机器( 二 )

这是脚本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多台机器】


推荐阅读