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

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

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

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

Хост(Host). Хостом является любой компьютер. В ИТ компьютеры называются хостами, потому что технически любой компьютер может содержать приложение, которое полезно для другого компьютера. Вы можете не думать о вашем ноутбуке как о «хосте», но у вас запущены некоторые службы, которые полезны для вас, вашего мобильного, или другого компьютера.

Локальный(Local). Локальным может быть компьютер или программное обеспечение, которое вы используете. Любой компьютер, например, называется локальным хостом.

Удаленный(Remote). Это компьютер, который физически не находится перед вами или которым вы физически не пользуетесь.

Итак, с терминологией уладили, можно начинать.

Для двух компьютеров, подключаемых по SSH, необходимо установить SSH. SSH состоит из двух компонентов: клиентской, которую вы используете на локальной машине для запуска соединения, и серверной - для приема входящих запросов на соединение. Некоторые компьютеры поставляются с одной или двумя уже установленными частями 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

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

Debian:

$ sudo apt install openssh-clients openssh-server

Fedora:

$ sudo dnf install openssh-clients openssh-server
Как правило, в большинстве современных дистрибутивов, клиентская часть уже установлена по умолчанию.

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

$ sudo systemctl enable --now sshd

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

Для доступа по 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.

Адрес 127.0.0.1 является специальным и на самом деле является адресом localhost. Это адрес «loopback», который ваша система использует, чтобы связаться с собой. Данный адрес нам не нужен для подключения к удаленной машине, поэтому в данном примере правильным IP-адресом удаленного компьютера является 10.1.1.5. Если удаленный компьютер находится в другой сети, так как 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 test.local
PING 10.1.1.5 (10.1.1.5) 56(84) bytes of data.

Теперь используйте SSH, чтобы войти в систему:

$ ssh test1@10.1.1.5
bash$ whoami
test1

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

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

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

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

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

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

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

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

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

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

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

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

PasswordAuthentication no

Кроме того, чтобы разрешить аутентификацию по ключу, а не по паролю найдите строку PubkeyAuthentication и убедитесь, что ее значение yes.

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

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

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

Источник