Согласно исходному коду dropbear , единственная подсистема, встроенная в SSH-сервер dropbear, - это дополнительная поддержка SFTP, которую я опишу ниже.
Поддержка другой подсистемы требует внесения изменений в исходный код для dropbear. Если это вариант, рассматриваемый код находится в функции sessioncommand()
в файле svr-chansession.c
:
#if DROPBEAR_SFTPSERVER
if ((cmdlen == 4) && strncmp(chansess->cmd, "sftp", 4) == 0) {
m_free(chansess->cmd);
chansess->cmd = m_strdup(SFTPSERVER_PATH);
} else
#endif
{
m_free(chansess->cmd);
return DROPBEAR_FAILURE;
}
По сути, вы бы добавили некоторый код, похожий на раздел «sftp», который проверяет имя вашей подсистемы и вызывает нужную команду.
Если вы не хотите создавать собственную версию dropbear, вы можете обойтись с помощью принудительной команды. Есть два способа сделать это.
Если пользователи этой подсистемы будут проходить аутентификацию с помощью ключа SSH, тогда вы можете поместить директиву «command» в файл authorized_keys
пользователя:
command="/usr/sbin/netconf-subsystem..." ssh-rsa AAAAB3NzaC1yc2...
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Когда клиент аутентифицируется с помощью ключа из этой строки в файле, то любая команда, оболочка или запрос подсистемы от клиента будут вызывать dropbear для вызова указанной команды вместо команды, запрошенной клиентом. Это функция сервера OpenSSH, которая также поддерживается dropbear.
В качестве альтернативы, dropbear имеет параметр командной строки -c
, который позволяет указать принудительную команду для всех клиентов:
dropbear -p 830 ... -c '/usr/sbin/netconf-subsystem ...'
Dropbear вызовет указанную команду для любого клиента, подключающегося к этому экземпляру dropbear. Если вы хотите разрешить клиентам выполнять другие действия, кроме выполнения этой команды, вам нужно будет запустить два экземпляра dropbear, прослушивая разные порты или адреса.
Поддержка подсистемы SFTP:
Я опишу это, потому что это, очевидно, плохо документировано.
Если dropbear скомпилирован с параметром DROPBEAR_SFTPSERVER
, то dropbear вызовет команду "/ usr / libexec / sftp-server" для клиентов, запрашивающих подсистему "sftp". Чтобы это работало, администратор обычно создает копию программы OpenSSH sftp-server из исходного кода OpenSSH и устанавливает получившуюся программу как /usr/libexec/sftp-server
.
.
Изменение dropbear для запуска другой команды требует изменения исходного кода dropbear и перекомпиляции dropbear.