我一直使用以下命令连接到一台服务器,该服务器连接到另一台服务器并在其上运行 tail -f:
ssh server1.com ssh server2.com tail -f file.log
到目前为止,这都运行良好。但是,当我想通过按 ctrl+c 退出 tail 进程时,我并没有退出 tail 进程,而是退出了 ssh 进程。这会让远程服务器上的 tail 进程继续运行,这显然不是一个好主意。
有人知道我该如何修复这个命令行吗?如果有在 os x 上运行的工具,可以让你轻松地在远程服务器上切换查看不同文件,我也会感兴趣。
答案1
如果您已经在 server1.com 上安装了 netcat(您可能已经安装了),那么您可能希望使用 ssh 指令ProxyCommand
无缝跳转 server1.com;因此,当您按 Ctrl+C 时,它只会终止 server2.com 上的命令,而不是您的 SSH 会话。
示例~/.ssh/config
(如果文件不存在则创建文件;如果文件存在则附加到末尾):
Host server2.com
User piskvor
ProxyCommand ssh -q server1.com nc -q0 server2.com 22
这里发生了什么:
- ssh 连接到 server1.com
- 它从那里远程连接到 server2.com(使用 nc)
- 通过 server1.com 传输数据
这对你的 ssh 客户端来说是完全透明的,因此你可以像直接连接一样使用 server2.com(例如 SFTP、X 转发、TCP 转发等)