Содержание
Аннотация
Часто бывает необходимо получить доступ к компьютеру удаленно.
Если пользователь отправляет логин и пароль в виде обычного текста,
они могут быть перехвачены и использованы злоумышленником для того,
чтобы получить доступ к удаленной системе от имени этого пользователя.
Это откроет нападающему доступ ко всем файлам пользователя и может
быть использовано для попытки получения
root
привилегий или попытки
проникновения на другую систему. В прошлом для удаленных соединений
использовались telnet, rsh и
rlogin, не шифровавшие передаваемый траффик и не
защищенные от прослушивания. Есть и другие
незащищенные каналы связи, создаваемые, например, при использовании FTP
или других программ для копирования через сеть, например rcp.
Комплект программ SSH обеспечивает необходимую защиту, шифруя передаваемый траффик, включая логин и пароль. При использовании SSH данные все же могут быть перехвачены, но без ключа, использующегося для шифрования, их невозможно будет расшифровать. Таким образом SSH обеспечивает безопасное соединение в небезопасной сети, такой как интернет. Комплект программ SSH доступен в openSUSE в пакете OpenSSH.
В openSUSE пакет OpenSSH установлен по умолчанию и включает в себя
программы ssh, scp и
sftp. В конфигурации по умолчанию удаленный доступ к
openSUSE возможен только с помощью служебных программ из комплекта OpenSSH, и только
если запущен sshd
и открыты соответствующие порты в брандмауэре.
Используя ssh можно подключаться к удаленным
системам и работать с ними в интерактивном режиме. Для того, чтобы подключиться
к sun
как пользователь
tux
используйте одну из следующих команд:
ssh tux@sun ssh -l tux sun
Если имя пользователя на локальном и удаленном компьютере совпадает, Вы можете его опустить: ssh sun. Удаленный компьютер запросит пароль удаленного пользователя. После успешной аутентификации Вы можете работать на удаленном компьютере в режиме командной строки и использовать интерактивные приложения, например YaST, в текстовом режиме.
Более того, ssh предоставляет возможность удаленного запуска неинтерактивных
команд на удаленной системе ssh
HOST
COMMAND
.
COMMAND
должна быть при необходимости взята в кавычки. Как и в
обычной командной строке, можно объединить несколько команд.
ssh root@sun "dmesg | tail -n 25" ssh root@sun "cat /etc/issue && uptime"
SSH также упрощает использование удаленных приложений X. Если Вы запустите
ssh с ключем -X
, переменная
DISPLAY
будет автоматически установлена на удаленном
компьютере и весь вывод X-сервера будет экспортироваться по
SSH соединению. Следует отметить, что запущенные удаленно приложения X
не могут быть перехвачены посторонними лицами.
Используя опцию -A
, механизм аутентификации ssh-agent
переносится на следующий компьютер. Таким образом, Вы можете работать с
различных компьютеров без вода пароля, но только если
Вы распространили свой публичный ключ на целевые машины и
сохранили его там надлежащим образом.
По умолчанию этот режим выключен, но может быть активирован в
в любое время в файле конфигурации
/etc/ssh/sshd_config
установкой
AllowAgentForwarding yes
.
scp копирует файлы на удаленный компьютер или с него. Если
имя пользователя на jupiter отличается от имени пользователя на sun,
укажите последнее используя формат username@host
. Если
файл требется скопировать в директорию, отличную от домашней директории
удаленного пользователя, укажите ее как
sun:DIRECTORY
. Следующие примеры
показывают, как скопировать файл с локальной машины на удаленную и
наоборот.
# local -> remote scp ~/MyLetter.tex tux@sun:/tmp # remote -> local scp tux@sun:/tmp/MyLetter.tex ~
Опция -l | |
---|---|
Команда ssh может быть использована с опцией |
После того, как правильный пароль введен, scp начинает передачу данных и
показывает растущий ряд звездочек, имитируя процентное соотношение выполнения процесса.
Кроме того, программа показывает предполагаемое время до его завершения.
Если указан ключ -q
, программа не будет ничего выводить на терминал.
scp также поддерживает рекурсивное копирование директорий. Команда
scp -r src/ sun:backup/
скопирует содержимое всей директории src
,
включая все поддиректории, в директорию backup
системы sun. Если поддиректории не
существуют, они будут созданы автоматически.
При использовании ключа -р
, scp сохранит дату последнего
изменения источника. Ключ -C
позволит сжать передаваемые
данные. Это минимизирует объем передаваемых данных, но нагрузит процессоры
на обеих машинах.
Если Вы хотите скопировать несколько файлов, утилита sftp будет удобной альтернативой scp. Эта утилита открывает консоль с набором команд похожим на команды стандартной ftp консоли. Введите help в подсказке sftp для получения списка доступных команд. Дополнительную информацию можно получить на странице man sftp (1).
sftp sun Enter passphrase for key '/home/fs/.ssh/id_rsa': Connected to sun. sftp> help Available commands: bye Quit sftp cd path Change remote directory to 'path' [...]
sshd
)¶
Для работы с программами ssh и scp, в фоновом режиме должнен быть запущен
SSH-демон, который будет использовать порт 22 TCP/IP
.
При запуске в первый раз, демон генерирует три пары ключей. Каждая пара
стоит из секретного и открытого ключа. Таким образом, эта процедура называется
основанной на открытом ключе. Чтобы гарантировать безопасность соединения через SSH,
доступ к файлу с секретным ключом должен быть только у системного администратора.
По умолчанию, этот файл имеет именно такие права. Секретный ключ используется только
локальным SSH-демоном и не должен быть предоставлен кому-то ещё. Открытый
ключ (узнаваемый по расширению файла .pub
) отправляется
клиенту, запросившему соединение. Файл, в котором находится открытый ключ,
может прочитать любой пользователь системы.
Связь инициирует SSH-клиент. SSH-демон ожидает запроса от SSH-клиента для создания соединения. Первым шагом они обмениваются информацией идентификации, проверяя протокол и версию SSH, а так же уточняя номер порта, т.к. дочерние процессы, порожденные SSH-демоном, могут одновременно обслуживать несколько SSH-сессий.
OpenSSH для связи между SSH-сервером и SSH-клиентом поддерживает первую
и вторую версию протокола SSH. По умолчанию используется вторая версия.
Если Вы хотите использовать первую версию, используйте ключ
-1
.
При использовании версии 1, SSH-сервер посылает свой открытый ключ и так называемый "ключ сервера", которые генерируются раз в час. На основании этих ключей SSH-клиент генерирует ключ сессии, который в последствии он посылает SSH-серверу. SSH-клиент также говорит серверу какой метод шифрования использовать. Вторая версия протокола SSH не требуют ключа сервера. Обе стороны используют алгоритм Диффи-Хеллмана (Diffie-Hellman) для обмена ключами.
Секретный и серверный ключи необходимы для расшифровки ключа сессии и не
могут быть получены, при использовании лишь открытых ключей. Только
запрашиваемый SSH-демон может расшифровать ключ сессии, используя свои секретные
ключи. Эта начальная фаза установки соедининения может быть исследована более детально
(включая отладочную информацию) при помощи ключа -v
SSH-клиента.
Рекомендуестся сохранять секретные и открытые ключи, которые находятся в
/etc/ssh/
, на каком-нибудь безопасном внешнем носителе.
В этом случае можно отследить подделку ключей или использовать старые ключи повторно,
к примеру, после переустановки системы.
Существующие SSH ключи | |
---|---|
Если Вы установите openSUSE на машину с уже установленной Linux системой, SSH ключ этой системы будет автоматически импортирован во время инсталляции с сохранением последнего времени доступа к нему. |
При первом соединении с удаленным компьютером, клиент сохранит
все открытые ключи в
~/.ssh/known_hosts
. Это предотвратит любую
атаку типа человек посередине—попытки других SSH серверов использовать
поддельные имена и IP адреса. Такие атаки обнаруживаются либо по ключу,
отсутствующему в ~/.ssh/known_hosts
,
либо по неспособности сервера расшифровать ключ сессии из-за отсутствия
соответствующей защищенной части ключа.
В случае, если открытый ключ сервера изменился (что необходимо выяснить
перед попыткой подключения к такому серверу),
несоответствующие ключи могут быть удалены командой ssh-keygen
-r
HOSTNAME
В своей простейшей форме, аутентификация производится вводом пароля пользователя,
как и при локальном входе в систему. Однако, запоминать пароли
нескольких пользователей удаленных компьютеров достаточно непрактично. К тому же,
эти пароли могут быть изменены. С другой стороны— при предоставлении доступа
в качестве root
администратору необходимо иметь возможность быстро отменить
эти привилегии без изменения пароля root
Для входа в систему, не используя пароль удаленного пользователя,
SSH использует другую пару ключей, которая должна быть сгенерирована
пользователем. Она состоит из открытого (id_rsa.pub
или
id_dsa.pub
) и защищенного ключа
(id_rsa
или id_dsa
).
Чтобы войти в систему не указывая пароль удаленного пользователя,
открытый ключ «пользователя SSH» должен существовать
в ~/.ssh/authorized_keys
. Этот подход также
предполагает, что удаленный пользователь получает полный доступ: добавление ключа
требует знания пароля удаленного пользователя и удаление ключа лишает
прав удаленного подключения к системе.
Для максимальной безопасности этот ключ должен быть защищен паролем, который вводится при каждом использовании команд ssh, scp и sftp. В отличие от простой аутентификации, этот пароль не зависит от удаленного пользователя и поэтому не изменяется.
В качестве альтернативы описанной выше аутентификации основанной на ключах, SSH также предлагает аутентификацию основанную на имени хоста. С ее помощью пользователь доверенного компьютера может подключится к другому компьютеру используя своё имя пользователя. openSUSE сконфигурирована для использования аутентификации основанной на ключах и настройка на ней аутентификации основанной на имени хоста openSUSE находится за пределами данного руководства.
Права доступа к файлам при использовании host-аутентификации | |
---|---|
При использовании host-аутентификации, файл
|
Для создания ключа с настройками по умолчанию (RSA, 2048 bits), введите команду ssh-keygen.
Согласитесь с дефолтным размещением ключа
(~/.ssh/id_rsa
), нажав
Enter (крайне рекомендуется) или введите
альтернативное размещение.
Введите пароль из 10 - 30 символов. Для него справедливы правила создания безопасных паролей. Крайне рекомендуется не оставлять его пустым.
Вы должны быть абсолютно уверены, что Ваш защищенный ключ недоступен
никому кроме Вас (всегда устанавливайте его права доступа в
0600
). Защищенный ключ никогда не должен попадать
в чужие руки.
Для смены пароля к существующему ключу используйте команду
ssh-keygen -p
.
Для копирования открытого SSH ключа в файл ~/.ssh/authorized_keys
пользователя удаленного компьютера, используйте команду
ssh-copy-id. Для того, чтобы скопировать Ваш личный ключ из
~/.ssh/id_rsa.pub
Вы можете использовать короткую форму.
Для копирования ключей DSA или ключей других пользователей, Вы должны
указать путь:
# ~/.ssh/id_rsa.pub ssh-copy-id -i tux@sun # ~/.ssh/id_dsa.pub ssh-copy-id -i ~/.ssh/id_dsa.pub tux@sun # ~notme/.ssh/id_rsa.pub ssh-copy-id -i ~notme/.ssh/id_rsa.pub tux@sun
Для успешного копирования ключа, Вам потребуется ввести пароль удаленного
пользователя. Для удаления существующего ключа отредактируйте вручную файл
~/.ssh/authorized_keys
.
При необходимости произвести большое количество операций довольно неудобно водить пароль SSH для каждой из них. Поэтому пакет SSH содержит еще один инструмент, ssh-agent, который сохраняет секретные ключи на время X-сессии или консольной сессии. Все остальные окна или программы запускаются как клиенты ssh-agent. После запуска агента, устанавливается набор переменных окружения, который будет использован командами ssh, scp и sftp, чтобы произвести автоматический вход посредством агента. За подробностями обратитесь к man 1 ssh-agent.
После запуска ssh-agent Вам понадобится добавить ключи используя команду ssh-add. Она запросит пароль. Затем Вы сможете использовать в текущей сессии команды ssh не вводя пароль для каждой из них.
В openSUSE ssh-agent запускается автоматически оконными менеджерами GNOME и KDE. Для того, чтобы добавить свои ключи посредством ssh-add при старте X-сессии, необходимо:
Войти в систему как пользователь и проверить, существует ли
файл ~/.xinitrc
.
Если он не существует,использовать шаблон или скопировать его из
/etc/skel
:
if [ -f ~/.xinitrc.template ]; then mv ~/.xinitrc.template ~/.xinitrc; \ else cp /etc/skel/.xinitrc.template ~/.xinitrc; fi
Если Вы скопировали шаблон, найдите следующие строки и
раскомментируйте их. Если ~/.xinitrc
уже существует,
добавьте следующие строки (без знаков комментария).
# if test -S "$SSH_AUTH_SOCK" -a -x "$SSH_ASKPASS"; then # ssh-add < /dev/null # fi
при старте новой X-сессии, у Вас будет запрошен SSH пароль.
В консольном сеансе Вам необходимо вручную запустить ssh-agent и затем вызвать ssh-add. Есть два способа запуска агента. Первый из приведенных ниже примеров запускает новую сессию bash поверх существующей. Второй пример запускает агент в существующей сессии и модифицирует окружение.
ssh-agent -s /bin/bash eval $(ssh-agent)
После того, как агент будет запущен, выполните ssh-add, чтобы добавить в него свои ключи.
ssh также может быть использован для перенаправления TCP/IP подключений. Эта опция,
называемая SSH туннелированием
, перенаправляет TCP соединения на
определенный порт другого компьютера по зашифрованному каналу.
Используя следующую команду, любое соединение на jupiter порт 25 (SMTP) перенаправляется на SMTP порт на sun. Это особенно полезно для тех, кто использует SMTP серверы без SMTP-AUTH или POP-before-SMTP. Электронная почта, откуда бы она ни пришла, будет передана для дальнейшей доставки «домашнему» почтовому серверу.
ssh -L 25:sun:25 jupiter
Аналогично, все POP3 запросы (порт 110) на jupiter погут быть перенаправлены на POP3 порт sun при помощи следующей команды:
ssh -L 110:sun:110 jupiter
Обе команды должны быть выполненны с правами root
, так как соединение
использует привилегированные порты. При использовании электронной почты
обычными пользователями будет использоваться SSH соединение. SMTP и POP3 должны быть
установлены в localhost
, чтобы это работало.
Дополнительную информацию можно найти в man-руководствах для каждой из программ,
описанной выше, а также в документации проекта OpenSSH:
/usr/share/doc/packages/openssh
.
Модуль YaST для настройки SSHD не входит в установку по умолчанию.
Для работы с ним установите пакет
yast2-sshd
.
Для настройки sshd-сервера с помошью YaST запустите YaST и выберите
+ . Затем сделайте следующее:
На вкладке sshd
.
По умолчанию используется порт 22. Вы можете выбрать несколько портов.
Чтобы добавить новый порт нажмите кнопку ,
введите номер порта и нажмите кнопку . Для удаления порта,
найдите его в таблице, нажмите кнопку и
подтвердите удаление.
Выберите опции, которые будут использоваться демоном
sshd
. Чтобы запретить переадресацию TCP,
снимите флажок .
Отключение переадресации TCP не улучшает безопасность, если пользователи имеют
доступ к терминалу, так как они всегда могут установить свои собственные переадресации.
См. Раздел 12.6, «Проброс порта» для получения дополнительной информации о
переадресации TCP.
Чтобы отключить переадресацию X, снимите флажок Раздел 12.1, «ssh—Secure Shell» для получения дополнительной информации о переадресации X.
. Если эта опция отключена, любые запросы переадресации X11 будут приводить к ошибке. Однако пользователи всегда могут установить свою собственную переадресацию. См.Опция
определяет, должно ли соединение между сервером и клиентом подвергаться компрессии.
Вкладка /etc/motd
при интерактивном режиме входа в систему.
Если Вы хотите отключить возможность входить в систему пользователю
root
, отключите
.
устанавливает количество попыток аутентификации за одно соединение. определяет, разрешена ли RSA аутентификация. Этот параметр применяется только к первой версии протокола SSH. определяет, разрешена ли аутентификация пользователя с помощью открытого ключа. Этот параметр используется только во второй версии протокола SSH.
На вкладке
определяются версии протокола SSH, которые должны поддерживатся. Вы можете выбрать первую или вторую версию, а так же параллельную поддержку обоих SSH-протоколов.В
перечислены все поддерживаемые алгоритмы шифрования. Вы можете удалить шифр, выбрав его в списке и нажав кнопку . Чтобы добавить шифр, выберите его из выпадающего меню и нажмите кнопку .Нажмите
для сохранения настроек.Страница проекта OpenSSH
Викиучебник OpenSSH
man-страница OpenSSH-демона
Man-страница файлов конфигурации клиента SSH OpenSSH
man-страницы о программах копирования файлов (scp, sftp), login (slogin, ssh), и ключах.