Про telnet, ssh, clish, klish в openWrt

По умолчанию для подключение через телнет не требуется авторизации и
достаточно просто набрать:

$ telnet 192.168.1.100
Trying 192.168.1.100...
Connected to 192.168.1.100.
Escape character is '^]'.
 === IMPORTANT ============================
  Use 'passwd' to set your login password
  this will disable telnet and enable SSH
 ------------------------------------------

BusyBox v1.19.4 (2013-07-08 17:26:11 MSK) built-in shell (ash)
Enter 'help' for a list of built-in commands.
 -----------------------------------------------------
 BARRIER BREAKER (Bleeding Edge, r36822)
 -----------------------------------------------------
  * 1/2 oz Galliano         Pour all ingredients into
  * 4 oz cold Coffee        an irish coffee mug filled
  * 1 1/2 oz Dark Rum       with crushed ice. Stir.
  * 2 tsp. Creme de Cacao
 -----------------------------------------------------

Если хотим сделать в openWrt авторизованный вход через telnet, то нужно внести исправления в следующие файлы:
файл /bin/login.sh должен выглядеть так:

#!/bin/sh
# Copyright (C) 2006-2011 OpenWrt.org

if ( ! grep -qs '^root:[!x]\?:' /etc/shadow || \
     ! grep -qs '^root:[!x]\?:' /etc/passwd ) && \
   [ -z "$FAILSAFE" ]
then
	echo "authorized access through telnet"
  busybox login
else
cat << EOF
 === IMPORTANT ============================
  Use 'passwd' to set your login password
 ------------------------------------------
EOF
exec /bin/ash --login
fi

При этом должна быть выставлена опция в make menuconfig:

-> Base system 
   -> busybox
     -> Configuration 
        -> Login/Password Management Utilities
        [*] login 

С помощью команды adduser добавить нового пользователя в систему:

root@OpenWrt:/# adduser guest

С помощью команды passwd задать пароль для root и для guest:

root@OpenWrt:/# passwd 
Changing password for root
New password: 

После того как будет задан пароль для root, запуск телнета будет отключен, стартовым
скриптом etc/init.d/telnet. Поэтому фунцию start можно пропатчить например так:

start() {
		service_start /usr/sbin/telnetd -l /bin/login.sh
}

Всё. Авторизация через телнет после этих операций будет выглядеть так:

$ telnet 192.168.1.100
Trying 192.168.1.100...
Connected to 192.168.1.100.
Escape character is '^]'.
authorized access through telnet
OpenWrt login: 

Для доступпа по ssh в openWrt используется сервер dropbear. Подключениие по ssh пользователем guest из консоли выглядит так:

$ ssh guest@192.168.1.100
The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
RSA key fingerprint is 22:bb:9f:3e:47:21:0f:64:7f:57:6b:6c:a1:1b:12:7c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.100' (RSA) to the list of known hosts.
guest@192.168.1.100's password: 

Как правило, доступ к устройству для пользователя guest должен быть ограничен,
определенным набором команд, а для пользователя root доступ без ограничений. Или при авторизации root должен запускаться интерпретатор /bin/ash, а при авторизации guest должна запускаться какая то другая оболочка.

Особенно удобным в использовании в качестве интерпретатора для пользователя guest является утилита clish. clish эмулирует CISCO-like интерфейс командной строки. Отдельное спасибо человеку, который продолжил развитие clish под созвучным названием klish.

Как сделать чтобы при авторизации пользователя guest через telnet или ssh запускался clish (klish)?

Необходимо внести изменения в файл /etc/passwd для пользователя guest:

guest:x:1000:1000:Linux User,,,:/home/guest:/usr/bin/clish

Также добавить в список регистрируемых оболочек в системе утилиту clish. Для этого внести изменения в файл /etc/shells

# cat /etc/shells 
/bin/ash
/usr/bin/clish

Перезагрузиться. В результате этого, для пользователя root будет запускаться привычная консоль с командной строкой, для пользователя guest при авторизации через telnet или ssh будет запускаться clish.