“反向外壳” - 从远程主机使用人工控制输入拉取外壳命令?

Ond*_*žka 3 ssh nc

我想连接到远程机器,最好是通过 SSH,然后从那里提取命令。

准确地说,我想让一台远程机器连接到我的本地机器,在那里我会有一个交互式控制台,发送命令并查看输出。
从功能上讲,它类似于 Windows 远程助手或名称。

我可以想象我将实现一个具有 GUI 的 HTTP 服务器,并且根据请求,它将永远保持连接并将我键入的任何行发送到 GUI;并接收另一方发送的所有内容作为其输出。我只需要处理 HTTP 标头。然而,这并不太优雅。

有没有这样的现成解决方案?或者可能使用nc某种工具将 TTY 与侦听端口连接起来?

Sté*_*las 5

如果你运行:

socat "unix-listen:$HOME/.shell-access,mode=600,fork" \
      "exec:$SHELL,pty,stderr,setsid,ctty"
Run Code Online (Sandbox Code Playgroud)

例如,这允许您执行以下操作:

socat -,raw,echo=0 "unix:$HOME/.shell-access"
Run Code Online (Sandbox Code Playgroud)

在本地连接并与该外壳交互。

然后你可以通过 ssh 远程端口转发它:

ssh -R "/path/to/socket/on/host:$HOME/.shell-access" user@host
Run Code Online (Sandbox Code Playgroud)

(假设相对较新的 openssh 版本(客户端和服务器))。

然后userhost可以通过这样做,与外壳进行交互

socat -,raw,echo=0 "unix:/path/to/socket/on/host"
Run Code Online (Sandbox Code Playgroud)

$SHELL您可以运行screen -xRS some-screen-session附加给定screen会话,而不是运行,以便多个人可以看到相同的屏幕会话。