Ibr*_*eem 2 ssh bash remote named-pipes file-descriptors
我的问题主要基于此 /sf/ask/1573574201/?rq=1
我遵循上述问题,并且能够连接到服务器,如下所示:
mkfifo CMDs.txt
exec 7> CMDs.txt
Run Code Online (Sandbox Code Playgroud)
然后从另一个终端我连接到服务器,如下所示:
sshpass -p 'mypass' ssh -tt myuser@${IP} < CMDs.txt
Run Code Online (Sandbox Code Playgroud)
会话已建立,但它不是交互式会话(它应该是)。但我可以通过将命令重定向到文件描述符 7 来将命令发送到远程服务器,如下所示:
echo "some command" >&7
echo "some more command" >&7
Run Code Online (Sandbox Code Playgroud)
这工作正常并显示我启动会话的另一个终端中的输出。我的目标是发送命令,并捕获变量中每个命令的输出,以便我可以在发送另一个命令之前对其进行分析。我认为通过阅读标准输出应该可以实现,但我无法弄清楚,因此发布了问题。我可以通过将输出重定向到文件中来捕获文件中的输出,如下所示:
sshpass -p 'mypass' ssh -tt myuser@${IP} < CMDs.txt >>outfile.txt
Run Code Online (Sandbox Code Playgroud)
也如参考问题中提到的,exec 7>&-
应该终止会话,但它没有,那么在发送所有命令后如何终止会话?
小智 5
这是一个有趣的(而且非常有用!)的面条。在输入/输出重定向领域,有很大的灵活性,因此有多种选择,但以下是对我有用的。
首先,确实,用于ssh-keygen
创建私钥/公钥对,并将公钥安装在远程服务器authorized_keys
文件上(这很简单,增强了安全性,网上有很多指南可以实现此目的)。为了获得额外的积分,请使用密码保护它并使用ssh-agent & ssh-add
- 每次启动时您实际上只需要运行ssh-agent & ssh-add
一次,然后就一切就绪了。
无论如何,我像您一样使用 7 文件描述符,并将 FIFO 名称基于 7,因此我可以轻松记住需要重定向到哪个 FD。;)
fd=7
server=[whatever_your_server_name_is]
mkfifo $server.$fd.in $server.$fd.out
# ssh-agent if needed
ssh -tt $server <$server.$fd.in >$server.$fd.out &
exec 7>$server.$fd.in
Run Code Online (Sandbox Code Playgroud)
现在舞台已经搭建好了。我可以将一些脚本/进程附加到$server.$fd.out
,但在下面的示例中,我只是将 cat 作为侦听器旋转 - 为了更好的可读性,我在单独的 ssh 会话中将其旋转,但如果使用 ' &' 将其设置为背景:
cat $server.$fd.out
Run Code Online (Sandbox Code Playgroud)
然后,无论你想要什么任意命令:
echo "hostname" >&7
echo "date" >&7
echo -e '\003' >&7 # ctrl+c...you're welcome ;)
Run Code Online (Sandbox Code Playgroud)
您将看到输出。请注意,首先,您将获得初始登录 motd/banner/etc,因此您附加到输出 FIFO 的任何脚本/应用程序都需要能够处理该问题。
值得注意的是,单个 FIFO 很可能可用于读取和写入,但 x.input/output 更适合我的个人目的,所以这就是我在这里展示的内容。
仅供参考:非常感谢您“让我到达那里”。我一直在试图弄清楚如何拥有一个“快速”的 ssh RPC,在其中建立一个长时间运行的 ssh 会话,然后可以在以后运行任意命令,而无需在每个命令处进行 ssh 身份验证的开销 - 我总是将其串在一起我可以使用许多命令来减少开销(甚至发送小脚本来读取输出并发出适当的后续命令),但最重要的是,当想要发出快速命令时,ssh 总是需要几秒钟的开销来连接和进行身份验证(当然使用密钥;)),当想要从多个设备快速获取某些内容时,这几秒钟可能会很痛苦。一些基本的逻辑来处理 ssh 或主机出去吃午饭,并自动重新建立,并且我有一个相当不错的设置来管理我的基础设施。
您问题中的见解实际上填补了我构建所需内容所需的空白。希望这个答案也能够帮助到您!:)
归档时间: |
|
查看次数: |
3765 次 |
最近记录: |