SSH = Secure Shell, то есть изначально данная технология разрабатывалась для решения задачи подключения к другим компютерам по сети и выполнения на них команд. Конечно, внешний наблюдатель не должен знать какие команды выполняются. Поэтому для связи между компьютерами устанавливается безопасное соединение, передача даннных осуществляется только в зашифрованном виде.

Принципиальная схема работы.

На компьютере, к которому мы хотим подключаться удалённым образом, устанавливается приложение-сервер, которое ожидает внешних подключений. На другом компьютере запускается приложение-клиент, которое подключается к серверу. Затем происходит процедура аутентификации. Если всё прошло успешно, то для клиента открывается удалённый терминал, в котором можно выполнять любые команды на удалённом сервере.

Взгляд со стороны клиента

ssh ad@somehost.com

  • ssh - название приложения-клиента, которое мы используем для подключения.
  • ad - имя пользователя на удалённом компьютере. Его можно не писать, если имя локального пользователя совпадает с именем удалённого пользователя.
  • @ - разделитель имени от адреса компьютера.
  • somehost.com - адрес компьютера. Может быть как доменным именем, так и ip-адресом.

Какие ещё бывают опции?

  • -p - с его помощью указывается порт, на котором запущен SSH-сервер. По умолчанию SSH работает на 22 порту, но это может быть изменено.
  • -X - передавать также и графические команды. Это позволяет запускать программу с графическим интерфейсом на удалённом компьютере, а работать на локальном.

Как происходит аутентификация

Существует несколько способов аутентификации пользователя. Важный момент: вы можете подключиться только к пользователям, которые существуют на удалённой машине. Варианты:

  1. По паролю пользователя. Т.е. необходимо указать такой же пароль, как и пароль у учётной записи на удалённом компьютере.
  2. По ключу пользователя. На компьютере, с которого осуществляется соединение, должен находится секретный ключ. На компьютере, к которому подключаемся, должен находится публичный ключ от секретного ключа. Т.е. на удалённом компьютере мы можем проверить, что секретный ключ действительно соотносится с публичным ключом и можем впустить пользователя.
  3. По ключу хоста. Логика, как и в предыдущем примере, однако проверке подвергается ключ, который привязан ко всему компьютеру, а не к конкретному пользователю. Такую защиту лучше не использовать.

С точки зрения защищённости пункты выше можно расположить в следующем порядке от самого не защищённого к потенциально самому защищённому:

  1. Пароль пользователя. Потому что пароль можно бесконечно долго подбирать и когда-то преуспеть в этом.
  2. По ключу хоста. Безопасно до тех пор пока ХОСТ не будет сам скомпрометирован.
  3. По ключу пользователя. Безопасно до тех пор пока ключ не утащили.
  4. По ключу пользователя, защищённого паролём. Надо не только иметь ключ, но и подобрать для него пароль.

Научимся проводить аутентификацию по ключу пользователя.

  1. Создать ключ пользователя. ssh-keygen
  2. Перенести публичную часть ключа пользователя на другой компьютер.

Основная цель: добиться того, чтобы в файле ~/.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 вещи:

  1. Перейти в каталог с теми файлами, что вы хотите передать.
  2. Подключиться к удалённому компьютеру, с которым хотим взаимодействовать.

Возможность проброса портов с удалённой машины на локальную

SSH позволяет вам создавать тунели не только для решения задач удалённого доступа, но также и для создания различных каналов связи:

  1. Вы можете поднять локальный SOCKS-прокси на удалённй компьютер. Т.е. вы сможете на своём компьютере подключаться к определённому порту, который будет оборачивать ваши запросы в SOCKS-канал связи. Запросы будут выполняться уже с удалённой машины. -D
  2. Вы можете организовать связь между локальным портом и удалённым портом. -R
  3. Вы можете свои ресурсы предоставить удалённой сети. -L.