我想在计算机 A 上设置一个 socat 套接字,它将从计算机 B 上的套接字接收一个字符串。该字符串应解释为将在计算机 A 上执行的命令的参数,例如:
电脑A:
socat TCP4-L:3334,fork SYSTEM:"./parsecommand.sh $INCOMING_STRING_OF_ARGS"
电脑B:
socat TCP4:remote.host:3334 SYSTEM:"echo 'out going string of args'"
这是此类动议的正确语法吗?例如,socat 宇宙中是否存在与 $@ 等效的变量,以便我可以用该变量替换 $INCOMING_STRING_OF_ARGS 来实现此操作?
在完整的上下文中:我们想要的是用“ssh”替换运行远程命令的“socat”。我们希望在计算机 A 和计算机 B 之间建立双向连接,将命令从计算机 B 发送到计算机 A,在计算机 A 上执行命令,并将输出返回到计算机 B。
看起来您正在寻找反向外壳?
在服务器上:
$ socat tcp-l:5050,reuseaddr,fork system:bash
(使用
openssl-l
而不是 tcp-listen
添加运输安全。)
在客户端:
$ socat - tcp:<server-ip>:5050
或者简单地
netcat
:
$ nc <server-ip> 5050
或者如果您希望 shell 脚本处理传入的命令:
$ cat parsecommand.sh
#!/bin/bash
#
# WARNING: command injection possible: don't use on production
while read -r remote_cmd; do
case "$remote_cmd" in
ls*) bash -c "$remote_cmd";;
*) ;;
esac
done
这非常不安全,所以我建议坚持使用 SSH。