提问人:Jason Eveleth 提问时间:10/28/2022 更新时间:10/28/2022 访问量:355
如何以编程方式将文件末尾字符发送到 ssh 连接
How do I send the end of file character to an ssh connection programmatically
问:
我想模拟这个 shell 会话:
$ ssh remotehost
[remote] $ cat > /tmp/test.txt
testing
newline
^D[remote] $ echo another cmd
another cmd
[remote] $ ^D
这将创建一个内容为“testing\nnewline\n”的新文件,然后运行另一个命令并终止 SSH 会话。/tmp/test.txt
我知道 EOT(传输结束字符)的 ascii 值是 。所以我想我可以通过运行以下命令来模拟这一点:0x04
$ echo "cat > /tmp/test.txt\ntesting\nnewline\n\x04echo another command\n" | ssh -tt remotehost
这似乎有效,因为它可以正确发送命令,但是当文件字符的末尾应该结束 cat 命令时,它会卡住。我做错了什么?
答:
0赞
Jason Eveleth
10/28/2022
#1
谢谢你@dave_tompson_085。您的评论使我意识到我应该检查时间并使用 printf。以下命令有效:
(printf 'cat > /tmp/test.txt\n';
sleep 2;
printf 'testing\nnewline\n\x04';
sleep 1;
printf 'echo another command\n\x04') | ssh -tt ...
另一种解决方案是在调用命令时使用 here 文档。cat
评论
echo
-e
printf
printf 'xxd<<<"a\x09b"\n' | ssh -tt ...
command <<XYZ \n blah \n XYZ \n