Перейти к содержимому
Базовая настройка коммутатора Cisco — часть 2: локальные пользователи, AAA и SSH | Стефан Жаврид

Базовая настройка коммутатора Cisco — часть 2: локальные пользователи, AAA и SSH

Привет! Меня зовут Стефан Жаврид. В первой части я показал, как закрыть коммутатор общими паролями. Здесь — следующий шаг, к которому я сам пришёл после пары инцидентов на стенде: именные пользователи, внешние AAA-серверы и нормальный SSH вместо Telnet. Без «мы» и корпоративного тона — только команды, которые я реально использую.

Зачем отказываться от общих паролей

В первой части мы настроили «один пароль на всех»: любой, кто знает пароль консоли или vty, заходит без имени. Для тестового стенда это нормально. Но как только на устройстве работает больше одного человека, начинаются проблемы: непонятно, кто именно менял конфигурацию, пароль приходится менять всем сразу, а уволившийся сотрудник уносит с собой доступ ко всей сети.

Поэтому в производственной среде я перехожу на именных пользователей — сначала локально на коммутаторе, потом через внешний AAA-сервер, если устройств много. И обязательно закрываю Telnet, оставляя только SSH.

Пояснение терминов

Четыре понятия, без которых дальше не разобраться.

Local username / secret
Пара «имя пользователя + пароль», сохранённая прямо в конфигурации коммутатора. Используется для входа по консоли, Telnet и SSH через команду login local.
AAA (Authentication, Authorization, Accounting)
Аутентификация (кто вы), авторизация (что вам можно) и учёт (что вы делали). Внешний сервер AAA хранит учётные записи централизованно для всех устройств.
RADIUS / TACACS+
Протоколы обмена между коммутатором и AAA-сервером. Оба шифруют пароли при передаче. TACACS+ чаще используют для управления сетевым оборудованием, RADIUS — для доступа пользователей в сеть.
SSH (Secure Shell)
Зашифрованный протокол удалённого доступа. В отличие от Telnet, который передаёт пароль открытым текстом, SSH шифрует весь сеанс. Требует генерации ключей на устройстве.

Локальные пользователи: именной вход

Это самый быстрый переход от общих паролей к именным. Мне нравится этот способ тем, что менять нужно всего пару строк конфигурации, а эффект сразу заметен: в логах появляется конкретное имя, а не «кто-то зашёл по 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+
Важно: конкретные команды настройки AAA зависят от того, какой сервер вы используете (Cisco ISE, FreeRADIUS, Windows NPS и т.д.) и какой протокол выбрали. Я не привожу здесь «универсальную» конфигурацию, потому что её не существует — проверьте инструкцию для вашего сервера и модели коммутатора на официальном сайте.

Настройка 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 Ничего Когда удалённый доступ не нужен вообще
Нюанс, на который я наткнулся: на маршрутизаторах Cisco по умолчанию часто стоит 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 защищает переход в привилегированный режим. Это два разных уровня, и настраивать нужно оба.
Нет. SSH требует пары имя/пароль. С общими паролями линии он не работает. Поэтому перед настройкой SSH обязательно заведите хотя бы одного локального пользователя и включите login local.
Минимум 768 бит для SSHv2, но я рекомендую 1024 или 2048. На старых моделях коммутаторов генерация 2048-битного ключа может занять несколько секунд — это нормально. На новых всё быстрее.
Потому что вы поставили transport input ssh — это правильно. Если Telnet нужен для теста, временно верните transport input all, но в продакшне я так не делаю.
Восстановление доступа требует физического подключения и процедуры password recovery: прерывание загрузки, изменение регистра, загрузка без конфигурации, сброс пароля, возврат конфигурации. Точная последовательность зависит от модели — проверьте на официальном сайте Cisco для вашей платформы. Это не то, что стоит делать по памяти.