SSH, Telnet и командная строка

From DD-WRT Wiki

Jump to: navigation, search


Contents

[edit] Telnet

  1. Откройте командную строку и введите «telnet» (в Windows Vista и выше утилиту нужно установить в диалоговом окне панели управления «Включение и отключение компонентов Windows»).
  2. Подключитесь к IP-адресу маршрутизатора, например, 192.168.1.1, поэтому в командной строке это будет выглядеть так:
telnet 192.168.1.1
  1. При запросе имени пользователя введите root (даже если вы изменили имя пользователя в веб-интерфейсе).
  2. При запросе пароля введите пароль маршрутизатора (по умолчанию «admin»).


[edit] SSH

[edit] Обзор

SSH, или Secure Shell, является зашифрованным протоколом и связанной программой, предназначенной для замены telnet. Его также можно использовать для создания безопасных туннелей, что-то вроде виртуальных частных сетей VPN, и для использования в качестве сетевой файловой системы (SSHFS). По умолчанию SSH работает на порту 22.

SSH работает так же, как telnet с комбинацией имени пользователя и пароля, или на основе открытого и закрытого ключей. Чтобы последние работали, серверу предоставляется короткий открытый ключ, а сервер отдает клиенту свой открытый ключ. Клиент шифрует информацию, отправляемую на сервер, используя открытый ключ сервера, а сервер шифрует информацию, отправляемую клиенту, используя открытый ключ от клиента. Закрытые ключи никуда не отправляются и используются для расшифровки полученной информации, зашифрованной с помощью соответствующего открытого ключа.

Подключение к DD-WRT может выполняться с использованием имени пользователя и пароля или только от клиентов, чьи открытые ключи были введены вручную через веб-интерфейс. Несколько ключей можно ввести, разместив каждый в отдельной строке. Если вы хотите использовать имя пользователя и пароль для входа в систему с использованием SSH, используйте имя «root» с паролем, который установлен для веб-интерфейса.

На самом деле можно вручную установить (через telnet или SSH) переменную NVRAM sshd_authorized_keys командой:

nvram set sshd_authorized_keys=ключ1 ключ2 ключ3

Также можно вручную отредактировать файл /tmp/root/.ssh/authorized_keys и добавить в него ключи (хотя они исчезнут при перезагрузке, если у вас нет автоматически запускающегося сценария командной строки, изменяющего файл).

Стоит отметить, что SSH-ключи - это довольно длинные строки символов, поэтому, если вы вставляете их из буфера обмена, следует быть осторожным, чтобы не допустить разрывов строк, иначе ключи не будут работать (т.е. ключ - это одна длинная непрерывная строка).

[edit] Настройка

[edit] Подключение с использованием открытого ключа

Аутентификация с открытым ключом является одним из самых безопасных методов входа в SSH. Он функционирует подобно HTTPS, поскольку все передачи зашифрованы ключом, который будут иметь только клиент и сервер. Еще один плюс в том, что если вы используете этот метод вместо аутентификации по паролю, никто не сможет взломать маршрутизатор, пытаясь угадать пароль!

Чтобы включить его, сначала нужно сгенерировать пару открытого и закрытого ключей на компьютере. Это можно сделать с помощью утилиты «Puttygen», если вы используете в качестве программы-клиента Putty или WinSCP. Скопируйте открытый ключ из области public key в буфер обмена и сохраните закрытый ключ где-нибудь на компьютере. Нет необходимости сохранять открытый ключ. Если вы его забудете, всегда можно открыть файл закрытого ключа в программе Puttygen, которая покажет открытый ключ, а не генерировать новую пару ключей. Пользователи операционных систем, отличных от Windows, могут использовать утилиту ssh-keygen(1):

user@machine:~> ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
68:1c:50:0e:76:c1:d0:c7:9e:5e:5a:65:78:20:5c:fb user@machine.example.com

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

  1. В веб-интерфейсе перейдите на вкладку Administration (в версии v24 - вкладку Services).
  2. На вкладке Services включите SSHd в группе параметров Secure Shell. Если после этого не появились новые параметры - сохраните настройки, нажав кнопку Save Settings.
  3. Вставьте ваш открытый ключ Public key в поле authorized key группы параметров SSHD. Нужно будет сгенерировать ключ на компьютере, если у вас его ещё нет.
  4. Сохраните и примените настройки, нажав кноки Save и Apply Settings.

ПРИМЕЧАНИЕ. Формат открытого ключа при вставке должен быть: «ssh-rsa», пробел, ключ, пробел, комментарий. Например (обратите внимание, что в конце не должно быть перевода строки):

 ssh-rsa AAAAB4NfaC3yc5...jZfYmBTi7Q== rsa-key-20101024

Альтернативный метод - подключиться к маршрутизатору по SSH, используя имя пользователя и пароль, и задать ключ командой:

root@wrt54g:~# nvram set sshd_authorized_keys='ssh-rsa AAAAB4NfaC3yc5 ... jZfYmBTi7Q==  rsa-key-20101024'
root@wrt54g:~# nvram commit
root@wrt54g:~# reboot

Не забудьте ввести ключ как целую строку символов (без пробелов, табуляции и т.п.).

В Putty можно использовать аутентификацию по ключу, открыв настройки аутентификации SSH (Connection → SSH → Auth) и введя или указав файл закрытого ключа. Также убедитесь, что имя пользователя для автоматического входа - root (Connection → Data).

[edit] Подключение с использованием имени пользователя и пароля

Если вы не хотите создавать SSH-ключи, можно использовать вход в систему с использованием имени пользователя и пароля. Однако учтите, что этот метод гораздо менее безопасен (пароли могут быть менее 8 символов)!

  1. В веб-интерфейсе перейдите на вкладку Administration (в версии v24 - вкладку Services).
  2. На вкладке Services включите SSHd в группе параметров Secure Shell. Если после этого не появились новые параметры - сохраните настройки, нажав кнопку Save Settings.
  3. Включите параметр Password Login для использования входа по паролю.
  4. Сохраните и примените настройки, нажав кноки Save и Apply Settings.

После этого вы можете войти в систему, используя имя пользователя «root» с паролем, который установлен для веб-интерфейса.

[edit] Автоматический вход (для сценариев оболочки)

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

# Требуется DD-WRT v24 или новее
DROPBEAR_PASSWORD='my password' ssh user@hostname

[edit] Советы по безопасности

  • Выберите случайный нестандартный номер порта больше 1024, особенно при включении SSH-доступа из Интернета! Большинство злоумышленников используют сканер портов, который по умолчанию сканирует только небольшое количество известных открытых портов. Сканирование всех 65535 портов намного медленнее, что затрудняет поиск вектора атаки, а также повышает вероятность обнаружения атаки системой обнаружения вторжений (англ. Intrusion Detection System, IDS).
  • Запомните или запишите в безопасное место отпечаток ключа от маршрутизатора! При подключении к маршрутизатору программа-клиент показывает отпечаток ключа (key fingerprint). Если вы видите, что отпечаток не изменился, то можете быть уверены, что никто не шпионит за вашим соединением с помощью атаки «человек посередине» (man-in-the-middle). Если отпечаток ключа НЕ совпадает (SSH-клиент, возможно, предупредит об этом), что-то не так и следует прервать соединение немедленно! Примечание: отпечаток ключа маршрутизатора может измениться после сброса к заводским настройкам или обновления прошивки, т.к. он, вероятно, сгенерирует новую пару ключей.
  • Для еще большей безопасности при использовании открытого ключа можно защитить закрытый ключ паролем. Таким образом, если злоумышленник завладеет ключом, он всё равно не сможет войти в маршрутизатор без предварительного взлома пароля от ключа. В противном случае, если ключи не защищены, любой, кто наткнется на них, может получить полный доступ к маршрутизатору и контроль над сетью.

[edit] SSH-клиент

Обеспечивает безопасную альтернативу стандартному Telnet.

Хороший клиент для Windows - Putty.

Настройте клиент для использования закрытого ключа, который вы сохранили ранее.

В большинство дистрибутивов Linux по умолчанию включены программы-клиенты для Telnet и SSH.

[edit] Переадресация SSH-порта

Переадресация SSH-порта (англ. SSH port forwarding) - это возможность создавать зашифрованные туннели для прохождения трафика, подобно VPN. Ниже мы обсудим два разных подхода к переадресации портов SSH - локальный и удаленный.

[edit] Переадресация локального порта

Пример из реального мира:

Предположим, что вы хотите управлять настройками маршрутизатора из любой точки Интернета. Хотите использовать веб-интерфейс, но не хотите включать управление через удаленный HTTP (небезопасно) или HTTPS (ресурсоемко). Как этого достичь?

Именно здесь нужна переадресация порта SSH. Эта функция позволяет безопасно подключаться к веб-интерфейсу маршрутизатора, даже если интерфейс настроен так, что он доступен только для компьютеров в локальной сети маршрутизатора.

Во-первых, в разделе Administration → Management необходимо включить параметр 'Remote SSH Management', если хотите подключиться к маршрутизатору из глобальной сети WAN.

Переадресация локального порта может быть установлена ​​из интерфейса командной строки следующей командой:

ssh -L <local_port>:<destination_server>:<destination_port> user@<ssh_server> -p <ssh_port>

Чтобы объяснить более понятно, что делает эта команда: ваш компьютер устанавливает SSH-соединение с <ssh_server>. Туннель создается между <local_port> вашего компьютера, <ssh_server> и <destination_port> на <destination_server>. Данные, отправленные в <local_port>, передаются по защищенному SSH-соединению в <ssh_server>, где они затем дешифруются и пересылаются в <destination_port> на <destination_server>.


Image:DD-WRT_SSH_Local_Port_Forwarding.png

Например, если IP-адрес интерфейса WAN маршрутизатора - 12.23.34.35, его SSH-порт для удаленного администрирования - 9999, а доступный через интерфейс LAN веб-интерфейс находится на порту 80:

ssh -L 12345:localhost:80 root@12.23.34.45 -p 9999

Получим соединение:


Image:DD-WRT_SSH_Port_Forward_Router.png


Откройте браузер и перейдите по адресу http://localhost:12345, и вы сможете войти в веб-интерфейс маршрутизатора, как если бы находились в локальной сети маршрутизатора. Это соединение безопасно!

Если вы используете PuTTY, процедура аналогична. Переадресация порта SSH настраивается в разделе SSH → Tunnels.

Примечание пользователя Brandonc: при использовании PuTTY из репозитория Ubuntu соединение завершается после входа в веб-интерфейс, выдавая ошибку: "SSH2_MSG_CHANNEL_FAILURE for nonexistent channel 257" (23:44, 2 августа 2012 г.).

Для получения дополнительной информации, связанной с настройкой туннеля, смотрите обсуждение на форуме.

[edit] Переадресация удаленного порта

Это полезно для туннелирования таких вещей, как удаленный рабочий стол (Remote Desktop, RDP) по зашифрованному туннелю SSH через Интернет. Например, вы хотите иметь доступ к вашему рабочему компьютеру из дома:

Домашний компьютер ↔ Маршрутизатор ↔ Интернет ↔ Брандмауэр ↔ Рабочий компьютер

На рабочем компьютере, на котором разрешен удаленный рабочий стол RDP через порт 3389, выполните ssh -R 5555:localhost:3389 root@router.home.

На домашнем компьютере можно использовать RDP-клиент для подключения к порту 5555 на маршрутизаторе, и это создаст SSH-туннель, который подключит домашний компьютер к порту 3389 на рабочем компьютере.

[edit] Требования
  • DD-WRT v24 RC7 или новее
  • В разделе Services → Secure Shell веб-интерфейса должны быть включены параметры SSHd и SSH TCP Forwarding.
  • В разделе Administration → Management должен быть включен параметр Remote SSH Management.
[edit] Настройка

Настроить переадресацию удаленного порта относительно просто при использовании утилиты PuTTY для Windows. См. Connections → SSH → Tunnels. Убедитесь, что ваша конфигурация включает параметры, как показано выше. А именно:

  • Local ports accept connections from other hosts.
  • Remote ports do the same (SSH-2 only).
  • Source port (номер порта на маршрутизаторе, должен быть больше 1024).
  • Destination (IP-адрес:Порт).
  • Remote.

[edit] SCP

Технология Secure Copy (SCP, с англ. "Защищенное копирование") позволяет безопасно копировать файлы с компьютера на маршрутизатор и обратно.

Некоторые хорошие клиенты для Windows - это FileZilla и WinSCP.

Настройте клиент для использования закрытого ключа, сохраненного ранее, или используйте вход по имени пользователя «root» и паролю от веб-интерфейса.

Помните: только разделы /tmp и /jffs доступны для записи!

[edit] Drop Bear

DropBear - это клиент и сервер SSH, установленный по умолчанию на маршрутизаторах WRT54G. DropBear позволяет подключаться с WRT54G к удаленному SSH-серверу для SCP и т.п. Мне кажется, что SSHD необяхательно включать через веб-интерфейс для использования клиентской части DropBear.

Если на компьютере есть сервер SSH (например, OpenSSH), вы можете получить файлы с компьютера с помощью команды scp. Её можно использовать в автоматически запускаемых сценариях.

[edit] Командная строка DD-WRT

Она же оболочка Linux DD-WRT. Это оболочка 'ash'. Ash - это версия sh, буквально «A SHell».

[edit] Основной синтаксис

Командная оболочка Linux (Linux Command Shell, Ash) отличается от командной строки Windows и DOS.

Символ / (а не \) используется для разделения каталогов при указании как локальных, так и сетевых путей.

Для выполнения команды необходимо указать путь к этой команде. Это может быть либо полный путь, либо относительный (relative path).

[edit] Операторы относительного пути

Есть два оператора относительного пути.

.        Текущий каталог
..       На одну директорию выше текущего каталога

[edit] Примеры

1) Если вы находитесь в каталоге /jffs/usr/bin и хотите запустить команду /jffs/usr/bin/noip, используйте:

/jffs/usr/bin # /jffs/usr/bin/noip

или

/jffs/usr/bin # ./noip


2) Если вы находитесь в каталоге /jffs/usr/bin и хотите запустить команду /jffs/usr/kismet, используйте:

/jffs/usr/bin # /jffs/usr/kismet

или

/jffs/usr/bin # ../kismet

или

/jffs/usr/bin # cd ..
/jffs/usr # ./kismet


3) Относительные пути также могут быть использованы в качестве аргументов. Если вы установили пакет noip, вы заметили бы, что команда установлена ​​как /jffs/usr/bin/noip, но ее файл конфигурации установлен как /jffs/etc/no-ip.conf. При запуске noip необходимо указать путь к файлу конфигурации с помощью команды -c. Это можно сделать так:

/jffs/usr/bin # ./noip -c /jffs/etc/no-ip.conf

или

/jffs/usr/bin # ./noip -c ../../etc/noip.conf

обратите внимание, что первый ../ приводит нас к /jffs/usr/. Второй ../ приводит к /jffs/. А затем можно добавить оставшуюся часть пути.


4) Хотя во всех других примерах показан минимально необходимый текст команды, с относительными путями также можно сотворить что-нибудь этакое. Чтобы запустить команду noip, как в примере 1, можно использовать:

/jffs/usr/bin # ../../../jffs/./usr/./bin/././../bin/././noip

Здесь мы проходим весь путь до корневого каталога /, затем переходим к /jffs/usr/bin, возвращаемся к /jffs/usr и, наконец, к /jffs/usr/bin.

Ссылки на текущий каталог /./ добавляются время от времени просто для того, чтобы вас запутать. Обратите внимание, что /./ всегда ссылается на текущий каталог.

[edit] Операторы конвеера и перенаправления

Pipe (конвеер) и Redirect (перенаправление) – это каналы взаимодействия между разными командами. Вывод одной команды (stdout) может быть передан на вход другой (stdin), как по конвееру, или перенаправлен в устройство или файл.

< и > - операторы перенаправления.

< берет данные из устройства или файла и направляет их на вход команды.

> берет вывод команды и направляет его в устройство или файл.

Например, если вы не хотите видеть вывод команды, перенаправьте ее на устройство null:

command > /dev/null

| - символ конвеера, который передает результат (вывод) одной команды (на вход) в другую.

Например: наиболее распространенное использование канала - ограничение вывода команды:

command | more

Это особенно полезно для таких команд, как nvram show, которая выводит около 800-1200 строк одновременно. Команда nvram show | more будет отображать результаты по одной странице за раз.

[edit] Фоновые процессы

Можно запускать программы в фоновом режиме (немедленно возвращает вас в командную строку), заканчивая команду символом &. Например:

команда &

Убедитесь, что добавили пробел между командой и амперсандом, иначе получите ошибку File not found ("Файл не найден").

[edit] Примечание по командной строке веб-интерфейса

Встроенный интерфейс командной строки веб-интерфейса DD-WRT (страница Diagnostics.asp) допускает максимум около 200 символов в строке.

Специальные символы, такие как " или |, должны быть экранированы - введены после знака \.

Например, если вы хотите установить значение текстового параметра NVRAM:

Вместо этого

nvram set svqos_svcs="edonkey p2p 0:0 40 | bittorrent p2p 0:0 40 |"

Введите

nvram set svqos_svcs=\"edonkey p2p 0:0 40 \| bittorrent p2p 0:0 40 \|\"

[edit] Основные команды

<command> -h                 Флаг -h почти всегда отображает справку по команде. Используйте его!
ls                           Показать содержимое текущего каталога
cd <directory or full path>  Сменить текущий каталог
cp <source> <destination>    Копировать файл <source> в место назначения <destination>
cp -r <source> <destination> Копировать каталог <source> в <destination>
mv <source> <destination>    Переместить файл <source> в <destination>
mkdir <directory name>       Создать новый каталог <directory name>
wget <URI>                   Скачать файл <URI> в текущий каталог
tar -xz -f <file>            Распаковать файл *.tgz или *.tar.gz
rm <file>                    Удалить файл <file>
rm -r <directory>            Удалить каталог и всё его содержимое
killall <program name>       Убить все запущенные процессы программы
ps                           Показать запущенные процессы
top                          Показывать запущенные процессы в графическом интерфейсе

[edit] Продвинутые команды

Для следующих команд имеются отдельные страницы Wiki:

[edit] Программы

  • PuTTY (все системы);
  • HyperTerminal (Windows XP и предыдущие версии);
  • minicom (Linux);
  • picocom (Linux);
  • terminalbpp (Windows).

[edit] Смотрите также

Script Examples
Сетевая файловая система SSHFS
Автоматически запускаемые сценарии
SSH access from internet
Tunnel all traffic over ssh using remote windows machine and Putty

[edit] Внешние ссылки

Статья Википедии о SSH
Linux Shell Scripting Tutorial
Telnet/SSH BusyBox Commands