使用不同的端口从 ssh 启动不同的应用程序?

Starting different applications from ssh by using different ports?

在基于 linux 的系统中¹,我希望能够使用 ssh 登录。我需要启动两个(或可能三个)不同的可执行文件,最好是通过连接到不同的端口。

理想情况下,我想打开几个不同的端口,并让 sshd 根据哪个端口启动不同的可执行文件²。我该如何设置?我浏览了 sshd_config,但没有找到任何看起来适用的内容。

出现的另一种选择是设置不同的用户,并将我要启动的不同应用程序设置为它们各自的 shell。

(我不想让远程用户指定可执行文件,如 ssh user@host executable。)

还是我错过了任何明显的解决方案?

¹这是一个基于 BuildRoot 的嵌入式系统,运行 资源相当匮乏,但它是一个成熟的最新 Linux 内核,我有一个可用的 ssh 连接。

²它们是基于 CLI 的交互式程序。

您可以将 SSH 服务器配置为侦听多个端口。只需在 sshd_config 中添加额外的端口,如下所示:

端口 22

端口 1111

端口 2222

大多数 linux 系统使用 OpenSSH 服务器。看起来您可以使用 Match 指令获得此行为。 SSH 服务器配置文件的文档是 here.

首先,您必须让 sshd 在您要使用的其他端口上侦听连接。您可以通过 PortListenAddress 指令执行此操作。

Port 22       -- Listen on the normal port 22
Port 42       -- Also listen on port 42
ListenAddress 1.2.3.4:62    -- Also listen on address 1.2.3.4, port 62

然后,您可以使用 MatchForceCommand 指令对连接到特定端口的用户执行特殊操作:

Match LocalPort 42
    ForceCommand /usr/local/bin/the-42-app

Match LocalPort 62
    ForceCommand /usr/local/bin/the-62-app

对于不想将 ssh 服务器设置为在多个端口上侦听的人,根据用户的连接方式,还有两种其他方法可以使服务器 运行 "canned" 应用程序.

子系统

子系统是预先配置到服务器中的命令。客户端按名称请求 运行 子系统,服务器 运行 发送与子系统关联的命令。这避免了客户端必须知道 运行.

的确切命令

您可以通过向 sshd_config:

添加一行来配置 sshd 中的子系统
Subsystem someApp /usr/local/bin/someApp

然后客户端这样调用:

ssh user@host -s someApp         -- "-s" means to request a subsystem

按键上的强制命令

对于基于密钥的身份验证,sshd 允许您在使用特定密钥时强制执行特定命令 运行。这是在记录 here.

authorized_keys 文件中完成的

authorized_keys 文件的每一行通常这样开始:

ssh-rsa AAAAB3N...

您可以在行前添加一个选项字段。您可以指定的选项之一是 运行 当密钥用于身份验证时的命令:

command="/usr/local/bin/someApp" ssh-rsa AAAAB3N...

当该密钥用于身份验证时,服务器将忽略客户端向 运行 请求的任何命令,而是 运行 指定的命令。