Базовая настройка коммутатора Cisco — часть 2: локальные пользователи, AAA и SSH
Привет! Меня зовут Стефан Жаврид. В первой части я показал, как закрыть коммутатор общими паролями. Здесь — следующий шаг, к которому я сам пришёл после пары инцидентов на стенде: именные пользователи, внешние AAA-серверы и нормальный SSH вместо Telnet. Без «мы» и корпоративного тона — только команды, которые я реально использую.
Зачем отказываться от общих паролей
В первой части мы настроили «один пароль на всех»: любой, кто знает пароль консоли или vty, заходит без имени. Для тестового стенда это нормально. Но как только на устройстве работает больше одного человека, начинаются проблемы: непонятно, кто именно менял конфигурацию, пароль приходится менять всем сразу, а уволившийся сотрудник уносит с собой доступ ко всей сети.
Поэтому в производственной среде я перехожу на именных пользователей — сначала локально на коммутаторе, потом через внешний AAA-сервер, если устройств много. И обязательно закрываю Telnet, оставляя только SSH.
Пояснение терминов
Четыре понятия, без которых дальше не разобраться.
login local.Локальные пользователи: именной вход
Это самый быстрый переход от общих паролей к именным. Мне нравится этот способ тем, что менять нужно всего пару строк конфигурации, а эффект сразу заметен: в логах появляется конкретное имя, а не «кто-то зашёл по vty».
Идея простая: в глобальной конфигурации я создаю пары имя/пароль командой username <имя> secret <пароль>, а в режиме линии вместо login ставлю login local. После этого коммутатор просит сначала имя пользователя, потом пароль — и сверяет их с локальной базой.
Таблица: что меняется по сравнению с первой частью
| Параметр | Часть 1 (общий пароль) | Часть 2 (локальные пользователи) |
|---|---|---|
| Что вводит пользователь | Только пароль | Имя пользователя + пароль |
| Команда в режиме линии | password … + login |
login local |
| Где хранятся учётные данные | В конфигурации линии | В глобальной базе username |
| Разные права для разных людей | Нет | Да, через уровень привилегий |
Пошаговая настройка
Вот последовательность, которую я ввожу на коммутаторе. Имена stefan и admin — для примера; пароли ставьте свои.
! Создаём локальных пользователей
Switch(config)# username stefan secret MyStr0ngPass
Switch(config)# username admin secret An0therPass
! Консоль: вход по локальной базе
Switch(config)# line console 0
Switch(config-line)# login local
Switch(config-line)# no password
Switch(config-line)# exit
! Telnet/vty: вход по локальной базе
Switch(config)# line vty 0 15
Switch(config-line)# login local
Switch(config-line)# no password
Switch(config-line)# end
Разбор ключевых моментов:
username … secret …— создаёт пару имя/пароль. Используюsecret, а неpassword: пароль хранится в виде хеша.login local— говорит коммутатору: «спрашивай имя и пароль и сверяй с локальной базой». Без этой команды локальные пользователи не применяются.no password— убирает старый общий пароль из линии. Необязательно, но я так делаю, чтобы конфигурация была чистой и не возникало путаницы.
login local, но забыл no password, коммутатор вёл себя странно — сначала просил имя, потом ещё и старый пароль линии. Убрал no password — и всё стало предсказуемо. Советую не оставлять «хвосты» в конфигурации.
После настройки вход по Telnet выглядит так: коммутатор просит Username:, затем Password:. Если пары нет в локальной базе — вход отклоняется. В логах при этом появляется конкретное имя, что для меня как администратора важнее всего.
Внешние AAA-серверы: когда устройств много
Локальные пользователи — хорошо, но у них есть очевидный минус: если у меня 30 коммутаторов и 20 инженеров, мне придётся заводить 20 учёток на каждом устройстве. Смена пароля превращается в квест. Именно поэтому в сетях с более чем десятком устройств я перехожу на внешний AAA-сервер.
Логика работы простая: пользователь вводит имя и пароль на коммутаторе, коммутатор отправляет их на AAA-сервер по RADIUS или TACACS+, сервер отвечает «да» или «нет», коммутатор пускает или не пускает. Все учётные записи хранятся в одном месте, и менять пароль нужно тоже в одном месте.
Таблица: локальные пользователи vs AAA
| Критерий | Локальные пользователи | Внешний AAA-сервер |
|---|---|---|
| Где хранятся учётные записи | На каждом устройстве отдельно | Централизованно на сервере |
| Смена пароля | На каждом устройстве | В одном месте |
| Подходит для | 1–5 устройств, лаборатории | Десятки устройств, продакшн |
| Сложность настройки | Низкая | Средняя: нужен сервер и его настройка |
| Протокол обмена | — | RADIUS или TACACS+ |
Настройка SSH: закрываем Telnet
Telnet передаёт всё открытым текстом, включая пароль. Любой, кто может перехватить трафик между вами и коммутатором, увидит его. SSH шифрует сеанс целиком. Для меня это не «желательно», а обязательное требование к любому устройству, которое торчит в сеть.
Хорошая новость: SSH использует ту же локальную базу пользователей, что и Telnet. Плохая: SSH не работает с общими паролями без имени. Поэтому перед настройкой SSH нужно завести хотя бы одного локального пользователя — как в предыдущем разделе.
Три команды, без которых SSH не заработает
SSH-серверу нужно полное доменное имя, чтобы сгенерировать ключи. Cisco IOS собирает его из имени хоста и доменного имени. Поэтому порядок такой:
hostname <имя>— задаёт имя устройства, если ещё не задано.ip domain-name <домен>— задаёт домен. Вместе они дают FQDN видаsw-1.testing.com.crypto key generate rsa— генерирует пару ключей. Для SSHv2 нужен модуль минимум 768 бит, я обычно ставлю 1024 или 2048.
! Имя и домен — основа для FQDN
Switch(config)# hostname sw-1
sw-1(config)# ip domain-name testing.com
! Генерация ключей (можно сразу указать модуль)
sw-1(config)# crypto key generate rsa modulus 1024
! Только SSH на vty, Telnet отключаем
sw-1(config)# line vty 0 15
sw-1(config-line)# transport input ssh
sw-1(config-line)# login local
sw-1(config-line)# end
Разбор команды transport input
Именно эта подкоманда решает, какие протоколы пускать на линии vty. Я обычно ставлю ssh и забываю про Telnet.
| Команда | Что разрешает | Когда использую |
|---|---|---|
transport input all |
Telnet и SSH | Только на тестовом стенде, временно |
transport input telnet ssh |
Telnet и SSH (явно) | То же, что all, но понятнее в конфигурации |
transport input ssh |
Только SSH | Продакшн, мой стандарт |
transport input telnet |
Только Telnet | Не использую — небезопасно |
transport input none |
Ничего | Когда удалённый доступ не нужен вообще |
transport input none. На коммутаторах — по-разному, зависит от модели и версии IOS. Если SSH «настроен, но не подключается» — первым делом проверьте эту строку в конфигурации vty.
Версия SSH
IOS по умолчанию поддерживает и SSHv1, и SSHv2. Первая версия давно считается небезопасной, поэтому я всегда добавляю ip ssh version 2 в глобальной конфигурации. Это одна строка, а спокойствия прибавляет.
sw-1(config)# ip ssh version 2
Проверка SSH после настройки
Убедиться, что SSH-сервер поднялся и клиенты подключаются, можно двумя командами:
show ip ssh— состояние самого SSH-сервера: версия, таймауты, количество попыток.show ssh— список активных SSH-сеансов с именами подключённых пользователей.
Если в show ip ssh версия 2.0 и статус enabled, а в show ssh виден ваш сеанс с нужным именем — всё работает. Если show ip ssh пишет, что SSH выключен, значит ключи не сгенерировались: проверьте, что имя хоста и домен заданы до команды crypto key generate rsa.
Частые ошибки, которые я встречал
- Забыли
login local. Локальные пользователи созданы, но коммутатор их не использует — просит старый пароль линии или пускает без проверки. - Оставили
passwordв линии. Смесь общего пароля иlogin localведёт себя непредсказуемо. Убирайтеno password. - Настраивают SSH без имени хоста и домена.
crypto key generate rsaвыдаст ошибку или создаст ключ с некорректным FQDN. - Ставят
transport input noneи удивляются. Это самая частая причина «SSH настроен, но не пускает». - Используют модуль ключа меньше 768 бит. SSHv2 с ним не заработает. Ставьте 1024 или больше.
- Забывают сохранить конфигурацию. После перезагрузки все настройки, включая ключи SSH, исчезнут без
copy running-config startup-config.
FAQ
login требует только пароль линии (как в первой части). login local требует имя пользователя и пароль и сверяет их с локальной базой username. Если база пуста, вход не пройдёт.enable secret защищает переход в привилегированный режим. Это два разных уровня, и настраивать нужно оба.login local.transport input ssh — это правильно. Если Telnet нужен для теста, временно верните transport input all, но в продакшне я так не делаю.Базовая настройка коммутатора Cisco — часть 2: локальные пользователи, AAA и SSH
Привет! Меня зовут Стефан Жаврид. В первой части я показал, как закрыть коммутатор общими паролями. Здесь — следующий шаг, к которому я сам пришёл после пары инцидентов на стенде: именные пользователи, внешние AAA-серверы и нормальный SSH вместо Telnet. Без «мы» и корпоративного тона — только команды, которые я реально использую.
Зачем отказываться от общих паролей
В первой части мы настроили «один пароль на всех»: любой, кто знает пароль консоли или vty, заходит без имени. Для тестового стенда это нормально. Но как только на устройстве работает больше одного человека, начинаются проблемы: непонятно, кто именно менял конфигурацию, пароль приходится менять всем сразу, а уволившийся сотрудник уносит с собой доступ ко всей сети.
Поэтому в производственной среде я перехожу на именных пользователей — сначала локально на коммутаторе, потом через внешний AAA-сервер, если устройств много. И обязательно закрываю Telnet, оставляя только SSH.
Пояснение терминов
Четыре понятия, без которых дальше не разобраться.
login local.Локальные пользователи: именной вход
Это самый быстрый переход от общих паролей к именным. Мне нравится этот способ тем, что менять нужно всего пару строк конфигурации, а эффект сразу заметен: в логах появляется конкретное имя, а не «кто-то зашёл по vty».
Идея простая: в глобальной конфигурации я создаю пары имя/пароль командой username <имя> secret <пароль>, а в режиме линии вместо login ставлю login local. После этого коммутатор просит сначала имя пользователя, потом пароль — и сверяет их с локальной базой.
Таблица: что меняется по сравнению с первой частью
| Параметр | Часть 1 (общий пароль) | Часть 2 (локальные пользователи) |
|---|---|---|
| Что вводит пользователь | Только пароль | Имя пользователя + пароль |
| Команда в режиме линии | password … + login |
login local |
| Где хранятся учётные данные | В конфигурации линии | В глобальной базе username |
| Разные права для разных людей | Нет | Да, через уровень привилегий |
Пошаговая настройка
Вот последовательность, которую я ввожу на коммутаторе. Имена stefan и admin — для примера; пароли ставьте свои.
! Создаём локальных пользователей
Switch(config)# username stefan secret MyStr0ngPass
Switch(config)# username admin secret An0therPass
! Консоль: вход по локальной базе
Switch(config)# line console 0
Switch(config-line)# login local
Switch(config-line)# no password
Switch(config-line)# exit
! Telnet/vty: вход по локальной базе
Switch(config)# line vty 0 15
Switch(config-line)# login local
Switch(config-line)# no password
Switch(config-line)# end
Разбор ключевых моментов:
username … secret …— создаёт пару имя/пароль. Используюsecret, а неpassword: пароль хранится в виде хеша.login local— говорит коммутатору: «спрашивай имя и пароль и сверяй с локальной базой». Без этой команды локальные пользователи не применяются.no password— убирает старый общий пароль из линии. Необязательно, но я так делаю, чтобы конфигурация была чистой и не возникало путаницы.
login local, но забыл no password, коммутатор вёл себя странно — сначала просил имя, потом ещё и старый пароль линии. Убрал no password — и всё стало предсказуемо. Советую не оставлять «хвосты» в конфигурации.
После настройки вход по Telnet выглядит так: коммутатор просит Username:, затем Password:. Если пары нет в локальной базе — вход отклоняется. В логах при этом появляется конкретное имя, что для меня как администратора важнее всего.
Внешние AAA-серверы: когда устройств много
Локальные пользователи — хорошо, но у них есть очевидный минус: если у меня 30 коммутаторов и 20 инженеров, мне придётся заводить 20 учёток на каждом устройстве. Смена пароля превращается в квест. Именно поэтому в сетях с более чем десятком устройств я перехожу на внешний AAA-сервер.
Логика работы простая: пользователь вводит имя и пароль на коммутаторе, коммутатор отправляет их на AAA-сервер по RADIUS или TACACS+, сервер отвечает «да» или «нет», коммутатор пускает или не пускает. Все учётные записи хранятся в одном месте, и менять пароль нужно тоже в одном месте.
Таблица: локальные пользователи vs AAA
| Критерий | Локальные пользователи | Внешний AAA-сервер |
|---|---|---|
| Где хранятся учётные записи | На каждом устройстве отдельно | Централизованно на сервере |
| Смена пароля | На каждом устройстве | В одном месте |
| Подходит для | 1–5 устройств, лаборатории | Десятки устройств, продакшн |
| Сложность настройки | Низкая | Средняя: нужен сервер и его настройка |
| Протокол обмена | — | RADIUS или TACACS+ |
Настройка SSH: закрываем Telnet
Telnet передаёт всё открытым текстом, включая пароль. Любой, кто может перехватить трафик между вами и коммутатором, увидит его. SSH шифрует сеанс целиком. Для меня это не «желательно», а обязательное требование к любому устройству, которое торчит в сеть.
Хорошая новость: SSH использует ту же локальную базу пользователей, что и Telnet. Плохая: SSH не работает с общими паролями без имени. Поэтому перед настройкой SSH нужно завести хотя бы одного локального пользователя — как в предыдущем разделе.
Три команды, без которых SSH не заработает
SSH-серверу нужно полное доменное имя, чтобы сгенерировать ключи. Cisco IOS собирает его из имени хоста и доменного имени. Поэтому порядок такой:
hostname <имя>— задаёт имя устройства, если ещё не задано.ip domain-name <домен>— задаёт домен. Вместе они дают FQDN видаsw-1.testing.com.crypto key generate rsa— генерирует пару ключей. Для SSHv2 нужен модуль минимум 768 бит, я обычно ставлю 1024 или 2048.
! Имя и домен — основа для FQDN
Switch(config)# hostname sw-1
sw-1(config)# ip domain-name testing.com
! Генерация ключей (можно сразу указать модуль)
sw-1(config)# crypto key generate rsa modulus 1024
! Только SSH на vty, Telnet отключаем
sw-1(config)# line vty 0 15
sw-1(config-line)# transport input ssh
sw-1(config-line)# login local
sw-1(config-line)# end
Разбор команды transport input
Именно эта подкоманда решает, какие протоколы пускать на линии vty. Я обычно ставлю ssh и забываю про Telnet.
| Команда | Что разрешает | Когда использую |
|---|---|---|
transport input all |
Telnet и SSH | Только на тестовом стенде, временно |
transport input telnet ssh |
Telnet и SSH (явно) | То же, что all, но понятнее в конфигурации |
transport input ssh |
Только SSH | Продакшн, мой стандарт |
transport input telnet |
Только Telnet | Не использую — небезопасно |
transport input none |
Ничего | Когда удалённый доступ не нужен вообще |
transport input none. На коммутаторах — по-разному, зависит от модели и версии IOS. Если SSH «настроен, но не подключается» — первым делом проверьте эту строку в конфигурации vty.
Версия SSH
IOS по умолчанию поддерживает и SSHv1, и SSHv2. Первая версия давно считается небезопасной, поэтому я всегда добавляю ip ssh version 2 в глобальной конфигурации. Это одна строка, а спокойствия прибавляет.
sw-1(config)# ip ssh version 2
Проверка SSH после настройки
Убедиться, что SSH-сервер поднялся и клиенты подключаются, можно двумя командами:
show ip ssh— состояние самого SSH-сервера: версия, таймауты, количество попыток.show ssh— список активных SSH-сеансов с именами подключённых пользователей.
Если в show ip ssh версия 2.0 и статус enabled, а в show ssh виден ваш сеанс с нужным именем — всё работает. Если show ip ssh пишет, что SSH выключен, значит ключи не сгенерировались: проверьте, что имя хоста и домен заданы до команды crypto key generate rsa.
Частые ошибки, которые я встречал
- Забыли
login local. Локальные пользователи созданы, но коммутатор их не использует — просит старый пароль линии или пускает без проверки. - Оставили
passwordв линии. Смесь общего пароля иlogin localведёт себя непредсказуемо. Убирайтеno password. - Настраивают SSH без имени хоста и домена.
crypto key generate rsaвыдаст ошибку или создаст ключ с некорректным FQDN. - Ставят
transport input noneи удивляются. Это самая частая причина «SSH настроен, но не пускает». - Используют модуль ключа меньше 768 бит. SSHv2 с ним не заработает. Ставьте 1024 или больше.
- Забывают сохранить конфигурацию. После перезагрузки все настройки, включая ключи SSH, исчезнут без
copy running-config startup-config.
FAQ
login требует только пароль линии (как в первой части). login local требует имя пользователя и пароль и сверяет их с локальной базой username. Если база пуста, вход не пройдёт.enable secret защищает переход в привилегированный режим. Это два разных уровня, и настраивать нужно оба.login local.transport input ssh — это правильно. Если Telnet нужен для теста, временно верните transport input all, но в продакшне я так не делаю.