Руководство для начинающих по SSH для удаленного подключения в Linux

Одна из самых привлекательных особенностей Linux – это способность умело использовать компьютер, используя только команды, вводимые с клавиатуры, и, что еще лучше, возможность делать это на компьютерах в любой точке мира. Благодаря OpenSSH пользователи POSIX могут открыть защищенную оболочку на любом компьютере, на котором у них есть разрешение на доступ, и использовать ее из удаленного места. Это повседневная задача для многих пользователей Linux, но она может сбивать с толку тех, кто еще не пробовал ее. В этой статье объясняется, как настроить два компьютера для соединений с защищенной оболочкой (SSH) и как безопасно подключаться друг к другу без пароля.

Терминология

При обсуждении нескольких компьютеров бывает сложно отличить один от другого. У ИТ-сообщества есть устоявшиеся термины, помогающие прояснить описания процесса объединения компьютеров в сеть.

  • Служба: служба – это программное обеспечение, которое работает в фоновом режиме, поэтому ее могут использовать компьютеры, отличные от того, на котором она установлена. Например, на веб-сервере размещается служба обмена данными . Этот термин подразумевает (но не настаивает), что это программное обеспечение без графического интерфейса.
  • Хост: Хост – это любой компьютер. В ИТ компьютеры называются хостом, потому что технически любой компьютер может размещать приложение, полезное для другого компьютера. Вы можете не думать о своем ноутбуке как о «хосте», но вы, вероятно, используете какую-то полезную для вас службу, свой мобильный телефон или другой компьютер.
  • Локальный: локальный компьютер – это тот компьютер, который используете вы или какое-либо программное обеспечение. Каждый компьютер называет себя localhost, например.
  • Удаленный: удаленный компьютер – это компьютер, перед которым вы не находитесь ни физически, ни физически. Это удаленный компьютер .

Теперь, когда терминология определена, можно начинать.

Активировать SSH на каждом хосте

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

file /etc/ssh/ssh_config
/etc/ssh/ssh_config: ASCII text

Если это вернет No such file or directoryошибку, значит, у вас не установлена ​​команда SSH.

Сделайте аналогичную проверку для службы SSH (обратите внимание dна имя файла):

file /etc/ssh/sshd_config
/etc/ssh/sshd_config: ASCII text

При необходимости установите то или другое:

sudo dnf install openssh-clients openssh-server

На удаленном компьютере включите службу SSH с помощью systemd:

sudo systemctl enable --now sshd

Кроме того, вы можете включить службу SSH в системных настройках в GNOME или в системных настройках в macOS. На рабочем столе GNOME он находится на панели общего доступа :

 

Запустите безопасную оболочку

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

Ваш удаленный пользователь не обязательно должен совпадать с вашим локальным пользователем. Вы можете войти в систему как любой пользователь на удаленном компьютере, если у вас есть пароль этого пользователя. Например, я admins24на своем рабочем компьютере, но я rsaна своем персональном компьютере. Если я использую свой персональный компьютер (что делает его моим текущим локальным компьютером) и хочу подключиться к моему рабочему компьютеру по SSH, я могу сделать это, указав себя как admins24и используя свой рабочий пароль.

Чтобы подключиться к удаленному компьютеру по SSH, вы должны знать его IP-адрес или разрешаемое имя хоста. Чтобы узнать IP-адрес удаленной машины, используйте ipкоманду (на удаленном компьютере):

ip addr show | grep "inet "
inet 127.0.0.1/8 scope host lo
inet 10.1.1.5/27 brd 10.1.1.31 [...]

Если на удаленном компьютере нет ipкоманды, попробуйте ifconfigвместо нее (или даже ipconfigв Windows).

Адрес 127.0.0.1 является специальным и фактически является адресом localhost. Это «петлевой» адрес, который ваша система использует для достижения самой себя. Это бесполезно при входе на удаленный компьютер, поэтому в этом примере правильный IP-адрес удаленного компьютера – 10.1.1.5. В реальной жизни я бы знал это, потому что моя локальная сеть использует подсеть 10.1.1.0. Если удаленный компьютер находится в другой сети, то IP-адрес может быть практически любым (хотя и не 127.0.0.1), и, вероятно, потребуется специальная маршрутизация для доступа к нему через различные брандмауэры.

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

ping -c1 10.1.1.5
PING 10.1.1.5 (10.1.1.5) 56(84) bytes of data.
64 bytes from 10.1.1.5: icmp_seq=1 ttl=64 time=4.66 ms
$ ping -c1 akiton.local
PING 10.1.1.5 (10.1.1.5) 56(84) bytes of data.

Это успех. Теперь используйте SSH для входа в систему:

whoami
rsa
$ ssh admins24@10.1.1.5
bash$ whoami
admins24

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

Создайте ключ SSH

Для безопасного входа на другой компьютер без пароля у вас должен быть ключ SSH. Возможно, у вас уже есть SSH-ключ, но создать новый не помешает. Ключ SSH начинает свою жизнь на вашем локальном компьютере. Он состоит из двух компонентов: закрытого ключа, которым вы никогда не делитесь ни с кем и ничем, и открытого ключа, который вы копируете на любой удаленный компьютер, к которому хотите получить доступ без пароля.

Некоторые люди создают один ключ SSH и используют его для всего, от удаленного входа до аутентификации GitLab. Однако я использую разные ключи для разных групп задач. Например, я использую один ключ дома для аутентификации на локальных машинах, другой ключ для аутентификации на обслуживаемых мною веб-серверах, отдельный для хостов Git, другой для репозиториев Git, которые я размещаю, и так далее. В этом примере я создам уникальный ключ для использования на компьютерах в моей локальной сети.

Чтобы создать новый ключ SSH, используйте ssh-keygenкоманду:

ssh-keygen -t ed25519 -f ~/.ssh/lan

Параметр -tобозначает тип и гарантирует, что шифрование, используемое для ключа, выше, чем значение по умолчанию. Параметр -fобозначает файл и устанавливает имя файла ключа и его расположение. Вам будет предложено создать пароль для вашего SSH-ключа. Вы должны создать пароль для ключа. Это означает, что вам нужно будет ввести пароль при использовании ключа, но этот пароль остается локальным и не передается по сети. После выполнения этой команды у вас останется закрытый ключ lanSSH и открытый ключ SSH lan.pub.

Чтобы передать открытый ключ на удаленный компьютер, используйте расширение ssh-copy-id. Чтобы это работало, вы должны убедиться, что у вас есть SSH-доступ к удаленному компьютеру. Если вы не можете войти на удаленный хост с паролем, вы также не можете настроить вход без пароля:

ssh-copy-id -i ~/.ssh/lan.pub admins24@10.1.1.5

Во время этого процесса вам будет предложено ввести пароль для входа на удаленный хост.

В случае успеха попробуйте снова войти в систему, но на этот раз с помощью -iопции, указывающей команде SSH на соответствующий ключ ( lanв этом примере):

ssh -i ~/.ssh/lan admins24@10.1.1.5
bash$ whoami
admins24

Повторите этот процесс для всех компьютеров в вашей сети, и вы сможете перемещаться по каждому хосту, никогда больше не думая о паролях. Фактически, если у вас настроена аутентификация без пароля, вы можете отредактировать /etc/ssh/sshd_configфайл, чтобы запретить аутентификацию по паролю. Это не позволяет никому использовать SSH для аутентификации на компьютере, если у них нет вашего закрытого ключа. Для этого откройте /etc/ssh/sshd_configв текстовом редакторе с sudoразрешениями и найдите строку PasswordAuthentication. Измените строку по умолчанию на это:

PasswordAuthentication no

Сохраните его и перезапустите SSH-сервер (или просто перезагрузитесь):

sudo systemctl restart sshd && echo "OK"
OK
$

Использование SSH каждый день

OpenSSH меняет ваш взгляд на вычисления. Вы больше не привязаны к компьютеру, который находится перед вами. С SSH у вас есть доступ к любому компьютеру в вашем доме или серверам, на которых у вас есть учетные записи, и даже к мобильным устройствам и устройствам Интернета вещей. Разблокировка мощности SSH также открывает возможности терминала Linux. Если вы не используете SSH каждый день, начните прямо сейчас. Разберитесь с ним, соберите ключи, живите более безопасно и расширяйте свой мир.