使用不同的端口从 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 在您要使用的其他端口上侦听连接。您可以通过 Port
或 ListenAddress
指令执行此操作。
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
然后,您可以使用 Match 和 ForceCommand 指令对连接到特定端口的用户执行特殊操作:
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...
当该密钥用于身份验证时,服务器将忽略客户端向 运行 请求的任何命令,而是 运行 指定的命令。
在基于 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 在您要使用的其他端口上侦听连接。您可以通过 Port
或 ListenAddress
指令执行此操作。
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
然后,您可以使用 Match 和 ForceCommand 指令对连接到特定端口的用户执行特殊操作:
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...
当该密钥用于身份验证时,服务器将忽略客户端向 运行 请求的任何命令,而是 运行 指定的命令。