SSH 中是否存在类似“本地过程调用”的机制,允许我在通过 SSH 连接到远程计算机后暂时将 STD{IN、OUT、ERR} 重定向到工作站上的进程?也许是涉及 SSH 端口转发和 netcat 的临时解决方案?
假设客户报告其 Web 服务器负载过高,而我通常无法管理这种情况,而且安装 SSHFS、NFS 或任何其他新软件包也是不可能的。
我决定我需要通过我信任的 IP 地址计数脚本来传输 Apache 请求日志,以列出最贪婪的客户端。我可以将脚本/日志文件 SCP/uuencode 到/从服务器传输。我可以复制并粘贴 $PWD,打开一个新终端,然后运行另一个 SSH 命令将日志文件 cat 到我的本地脚本中。
但几秒钟后,我决定我需要阻止滥用 IP,而且我也有一个脚本。然后我发现我需要一个又一个脚本,很快 SCP / uuencode / pbcopy / 复制和粘贴以及在终端窗口间切换就变得很麻烦。
我只想:
$ ssh server.example.com
$ runhere whereis-apache-log.sh
Apache logs found:
wordpress.example.com /var/logs/apache2
example.com /dev/null
business.example.com /opt/serious_business/logs/apache/usr/logs/nfs/hello_logs/logs/log
$ cd /opt/serious_business/logs/apache/usr/logs/nfs/hello_logs/logs/log
$ pipehome ip-tally.pl < access.log
13.14.15.16 5
1.2.3.4 20
9.10.11.12 46
5.6.7.8 57
17.18.19.20 43728
$ runhere block-forever.py 17.18.19.20
答案1
你能这样做吗:
workstation$ ssh server cat /var/log/apache/access.log |ip-tally.pl
cat 将在服务器上运行,stdout 通过管道传输到工作站,ip-tally 在工作站本地运行,cat 输出作为 stdin