2016-08-11 4 views
0

В Linux-системе¹, я хотел бы иметь возможность входа в систему с помощью ssh. Мне нужно запустить два (или, возможно, три) разных исполняемых файла, в идеале, подключаясь к разным портам.Запуск различных приложений из ssh с использованием разных портов?

В идеале я хотел бы открыть несколько разных портов и запустить sshd различные исполняемые файлы² в зависимости от того, какой порт. Как мне настроить это? Я просмотрел файл sshd_config, но не нашел ничего подходящего.

Еще одна альтернатива, которая возникла, заключалась в том, чтобы настроить разных пользователей и настроить различные приложения, которые я хочу запускать, в качестве их соответствующих оболочек.

(То, что я не хочу, чтобы сделать это, чтобы удаленный пользователь указать исполняемый файл, как в ssh [email protected] executable.)

Или я пропустил какие-либо очевидное решение?

¹ Это встроенная система на основе BuildRoot, работающая на довольно скудных ресурсах, но это полноценное последнее ядро ​​Linux, и у меня есть рабочее ssh-соединение.

²Это интерактивные программы на основе CLI.

ответ

1

Большинство систем 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 для прослушивания на нескольких портах, есть два других способа заставить сервер запускать «консервированные» приложения в зависимости от того, как пользователь подключается.

Подсистемы

подсистема представляет собой команду, которая предварительно настроена на сервер. Клиенты запрашивают запуск подсистемы по имени, а сервер выполняет команду, связанную с подсистемой. Это позволяет избежать того, что клиент должен знать точную команду для запуска.

конфигурируются подсистемы в SSHD, добавив следующую строку в sshd_config:

Subsystem someApp /usr/local/bin/someApp 

Затем клиент называет это так:

ssh [email protected] -s someApp   -- "-s" means to request a subsystem 

Принудительный Команды на Кис

для ключа , sshd позволяет принудительно запускать определенную команду, когда используется конкретный ключ. Это делается в файле authorized_keys, который документирован here.

Каждая строка из файла authorized_keys обычно начинается так:

ssh-rsa AAAAB3N... 

Вы можете предварять поле параметров линии. Один из вариантов вы можете указать это команда для запуска, когда ключ используется для проверки подлинности:

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

Когда этот ключ используется для проверки подлинности, сервер будет игнорировать любые команды клиентских запросов для запуска и запуска указанную команду.

+0

Спасибо! Это именно то, что я ищу. Я просмотрел страницу sshd man, но не понимал, что директиву «match» можно использовать так. – Popup

0

Вы можете настроить SSH-сервер для прослушивания нескольких портов. Просто добавьте дополнительные порты в sshd_config так:

порт 22

Порт 1111

Порт 2222

+0

Спасибо! Но как я могу сообщить sshd о запуске другого исполняемого файла в зависимости от того, какой порт был использован? – Popup

+0

Это должно быть так же просто, как "SSH -p 22 user1 @ дата server1" "SSH -p 1111 user2 @ сервер1 ДФ -ah" Или вы ищете что-то другое? – Shantanu

+0

Ну, как я указал в вопросе, я бы предпочел, чтобы пользователь явно не указал исполняемый файл. (По различным причинам - не все они действительны.) – Popup