![如何通过 ssh 将远程机器的命令输出重定向到本地文件?](https://linux22.com/image/893373/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%20ssh%20%E5%B0%86%E8%BF%9C%E7%A8%8B%E6%9C%BA%E5%99%A8%E7%9A%84%E5%91%BD%E4%BB%A4%E8%BE%93%E5%87%BA%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%E6%9C%AC%E5%9C%B0%E6%96%87%E4%BB%B6%EF%BC%9F.png)
示例:我通过 ssh 登录我的笔记本电脑(Ubuntu 14.04),我需要制作一些命令输出的 .log 文件,然后将其传输到我的台式机。该命令有将-o
输出重定向到文件的选项。然后我可以使用命令复制文件scp
。
问题是:是否可以将输出直接重定向到我的机器,而无需先在笔记本电脑上创建文件,然后再传输它scp
?
两台机器都使用 Ubuntu 14。
答案1
根据您的命令,您可以执行如下操作:
ssh user@machine command > log
日志会保存在你的机器里,真实的例子:
ssh [email protected] ls > log
如果您的命令不支持输出,则按stdout
如下方式运行:
ssh [email protected] "command -o output; cat output" > log
答案2
如果您想同时查看输入的内容和输出内容 - 请尝试:
ssh user@host 2>&1 | tee ssh-session.log
答案3
我有一个类似的要求,只是我需要能够在登录并设置后“打开”到本地管道/进程的输出。我不希望所有登录文本都放入本地文件/管道中。
基本上,我需要从远程机器执行 ngrep,并将输出通过管道传输到本地测试脚本,该脚本检查网络流量中的某些内容。此外,当测试运行时,我不想混合输出,如果我使用 tee 就会发生这种情况。我会看到 ngrep 的输出,加上测试的输出,这会令人困惑。此外,直接重定向到文件 > 文件名意味着登录过程将全部重定向到该文件,我将无法看到发生了什么。
这是一个演示,因此观众必须清楚发生了什么。
ssh yo@remote_box.
sudo ngrep | local_application
Bzzzzt!!!错了!这样不行
如果 ngrep 不需要 sudo,这不会是个问题。我真的无法 chmod a+s ngrep,否则 devops 会对我的情况造成严重影响。