Сетевая служба SSH
SSH = Secure Shell, то есть изначально данная технология разрабатывалась для решения задачи подключения к другим компютерам по сети и выполнения на них команд. Конечно, внешний наблюдатель не должен знать какие команды выполняются. Поэтому для связи между компьютерами устанавливается безопасное соединение, передача даннных осуществляется только в зашифрованном виде.
Принципиальная схема работы.
На компьютере, к которому мы хотим подключаться удалённым образом, устанавливается приложение-сервер, которое ожидает внешних подключений. На другом компьютере запускается приложение-клиент, которое подключается к серверу. Затем происходит процедура аутентификации. Если всё прошло успешно, то для клиента открывается удалённый терминал, в котором можно выполнять любые команды на удалённом сервере.
Взгляд со стороны клиента
ssh ad@somehost.com
ssh
- название приложения-клиента, которое мы используем для подключения.ad
- имя пользователя на удалённом компьютере. Его можно не писать, если имя локального пользователя совпадает с именем удалённого пользователя.@
- разделитель имени от адреса компьютера.somehost.com
- адрес компьютера. Может быть как доменным именем, так и ip-адресом.
Какие ещё бывают опции?
-p
- с его помощью указывается порт, на котором запущен SSH-сервер. По умолчанию SSH работает на 22 порту, но это может быть изменено.-X
- передавать также и графические команды. Это позволяет запускать программу с графическим интерфейсом на удалённом компьютере, а работать на локальном.
Как происходит аутентификация
Существует несколько способов аутентификации пользователя. Важный момент: вы можете подключиться только к пользователям, которые существуют на удалённой машине. Варианты:
- По паролю пользователя. Т.е. необходимо указать такой же пароль, как и пароль у учётной записи на удалённом компьютере.
- По ключу пользователя. На компьютере, с которого осуществляется соединение, должен находится секретный ключ. На компьютере, к которому подключаемся, должен находится публичный ключ от секретного ключа. Т.е. на удалённом компьютере мы можем проверить, что секретный ключ действительно соотносится с публичным ключом и можем впустить пользователя.
- По ключу хоста. Логика, как и в предыдущем примере, однако проверке подвергается ключ, который привязан ко всему компьютеру, а не к конкретному пользователю. Такую защиту лучше не использовать.
С точки зрения защищённости пункты выше можно расположить в следующем порядке от самого не защищённого к потенциально самому защищённому:
- Пароль пользователя. Потому что пароль можно бесконечно долго подбирать и когда-то преуспеть в этом.
- По ключу хоста. Безопасно до тех пор пока ХОСТ не будет сам скомпрометирован.
- По ключу пользователя. Безопасно до тех пор пока ключ не утащили.
- По ключу пользователя, защищённого паролём. Надо не только иметь ключ, но и подобрать для него пароль.
Научимся проводить аутентификацию по ключу пользователя.
- Создать ключ пользователя.
ssh-keygen
- Перенести публичную часть ключа пользователя на другой компьютер.
Основная цель: добиться того, чтобы в файле ~/.ssh/authorized_keys
была строчка, содержащая текст публичного ключа нашего компьютера. В данном файле содержится список ключей, которые могут быть использованы для внешнего подлкючения в данную учётную запись.
- Используем приложение
ssh-copy-id
. - Используем приложение
scp
. Данное приложение позволяет копировать данные между текущей машиной и удалённым компьютером. Логика его работы в целом совпадает с логикой работыcp
.
Задача
Создайте свой собственный SSH-ключ и обеспечьте доступ по ключу на компьютер 10.7.223.12.
Кратко о настройках сервера
Под GNU/Debian для установки клиента используется пакет openssh-clien, для сервера - openssh-server
.
Файл конфигурации сервера находится по адресу /etc/ssh/sshd_config
. Важные опции:
Port
- порт, на котором осуществляется прослушивание входящих подключений. По умолчанию 22.ListenAddress
- адрес, на котором осуществляется ожидание входящих содениний. Если указано 0.0.0.0, то сервер будет слушать подключение на всех адресах, которые есть у компьютера.PubkeyAuthentication
- включить или выключить подключение по ключам пользователя.AuthorizedKeysFile
- путь к файлам, которые могут содержать у себя публичную часть ключей.UsePAM
- использовать подсистему PAM для аутентификации пользователей по паролю. PAM = Pluggable Authentication M….., система для гибкой авторизации пользователей под Linux.
Допольнительные возможности
Улучшенная передача файлов между компьютерами
scp
хорошо, но очень неудобно, если необходимо перенести много файлов или путь к файлу не прост. Более серьёзное решение для передачи файлов - sftp
.
Для запуска sftp необходимо сделать 2 вещи:
- Перейти в каталог с теми файлами, что вы хотите передать.
- Подключиться к удалённому компьютеру, с которым хотим взаимодействовать.
Возможность проброса портов с удалённой машины на локальную
SSH позволяет вам создавать тунели не только для решения задач удалённого доступа, но также и для создания различных каналов связи:
- Вы можете поднять локальный SOCKS-прокси на удалённй компьютер. Т.е. вы сможете на своём компьютере подключаться к определённому порту, который будет оборачивать ваши запросы в SOCKS-канал связи. Запросы будут выполняться уже с удалённой машины.
-D
- Вы можете организовать связь между локальным портом и удалённым портом.
-R
- Вы можете свои ресурсы предоставить удалённой сети.
-L
.