我遇到了以下问题。我的正常工作文件位于可以通过 SSH 连接的远程计算机上。我希望能够从远程计算机在本地打印机上进行打印,而无需打印到文件,然后将文件 scp 到本地计算机。
我需要的是一个可以在远程机器上调用的脚本或程序,它可以接受文件作为参数(或者从 stdin 读取输入,这并不重要),并且以某种方式在本地机器上执行 lpr。
限制:1) 本地计算机未运行 SSH 服务器。因此,我无法编写脚本将文件 scp 回本地计算机并远程执行 lpr。
2)本地机器上没有邮件服务器,所以我无法通过电子邮件发送文件,并在本地进行过滤。
两台机器都运行 Linux,并有各种常规程序,我可以运行自己的脚本并编译程序。有什么想法吗?
答案1
假设您的本地 Linux 服务器运行打印服务器,您可以使用 ssh 端口转发来使其工作......
- 在您的本地机器上,您需要一个配置为使用 lpr 协议接受远程打印请求的打印服务器。
- 当您连接到远程服务器时,将其添加到您的 ssh 命令行:
-R 515:localhost:515
这将导致 ssh 监听远程服务器上的 tcp 端口 515,并通过 ssh 隧道将所有连接转发到本地计算机。到达那里后,连接将转发到本地主机(即您的打印服务器)的端口 515。 - 在指向 localhost:515 的远程计算机上配置一个打印队列。
如果远程服务器已经运行打印服务器,我相信可以更改端口以防止冲突。
答案2
我找到了我需要的程序:细菌耐药性利用反向端口转发允许在本地计算机上执行各种命令。它没有很好的文档记录,特别是对安装做出了严格的假设,在我的例子中,它对 shell 初始化文件所做的默认更改与其他地方对 TERM 变量的处理相冲突,但源代码是不言自明的,并且易于修改。
答案3
通过 VT100 控制代码打印,您可以通过这些命令将 PostScript 或其他二进制文件推送回本地打印机,您的客户端可能会有所不同。
Some terminals support local printing:
Print Screen <ESC>[i
Print the current screen.
Print Line <ESC>[1i
Print the current line.
Stop Print Log <ESC>[4i
Disable log.
Start Print Log <ESC>[5i
Start log; all received text is echoed to a printer.