Secure Shell (SSH) — это криптографический сетевой протокол, используемый для шифрованного соединения между клиентом и сервером. Клиент ssh создает защищенное соединение с сервером SSH на удаленной машине. Зашифрованное соединение может использоваться для выполнения команд на сервере, туннелирования X11, переадресации портов и многого другого.
Есть ряд SSH-клиентов, доступных как бесплатных, так и коммерческих, при этом OpenSSH является наиболее широко используемым клиентом. Он доступен на всех основных платформах, включая Linux, OpenBSD, Windows, macOS и другие.
В этой статье мы расскажем, как использовать клиент командной строки OpenSSH (ssh) для входа на удаленный компьютер и выполнения команд или выполнения других операций.
Клиентская программа OpenSSH вызывается ssh и может быть вызвана из терминала. Клиентский пакет OpenSSH также предоставляет другие утилиты SSH, такие как scp и sftp, которые устанавливаются вместе с командой ssh.
Клиент OpenSSH по умолчанию предустановлен в большинстве дистрибутивов Linux. Если в вашей системе не установлен клиент ssh, вы можете установить его с помощью менеджера пакетов вашего дистрибутива.
sudo apt update sudo apt install openssh-client
sudo dnf install openssh-clients
Большинство пользователей Windows используют Putty для подключения к удаленному компьютеру через SSH. Однако последние версии Windows 10 включают в себя клиент и сервер OpenSSH. Оба пакета могут быть установлены через графический интерфейс или PowerShell.
Чтобы найти точное имя пакета OpenSSH, введите следующую команду:
Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
Команда должна вернуть что-то вроде этого:
Name : OpenSSH.Client~~~~0.0.1.0 State : NotPresent Name : OpenSSH.Server~~~~0.0.1.0 State : NotPresent
Как только вы узнаете имя пакета, установите его, выполнив:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
В случае успеха вывод будет выглядеть примерно так:
Path : Online : True RestartNeeded : False
MacOS поставляется с клиентом OpenSSH, установленным по умолчанию.
Следующие требования должны быть выполнены, чтобы иметь возможность войти в удаленный компьютер через SSH:
Основной синтаксис команды ssh следующий:
ssh [OPTIONS] [USER@]:HOST
Чтобы использовать команду ssh, откройте свой терминал или PowerShell и введите ssh, а затем имя удаленного хоста:
ssh ssh.andreyex.ru
При первом подключении к удаленному компьютеру через SSH вы увидите сообщение, подобное приведенному ниже.
The authenticity of host 'ssh.andreyex.ru (192.168.121.111)' can't be established. ECDSA key fingerprint is SHA256:Vybt22mVXuNuB5unE++yowF7lgA/9/2bLSiO3qmYWBY. Are you sure you want to continue connecting (yes/no)?
Каждый хост имеет уникальный отпечаток, который хранится в файле ~/.ssh/known_hosts.
Введите yes для хранения удаленного отпечатка, и вам будет предложено ввести пароль.
Warning: Permanently added 'ssh.andreyex.ru' (ECDSA) to the list of known hosts. dev@ssh.andreyex.ru's password:
После того, как вы введете пароль, вы войдете на удаленный компьютер.
Если имя пользователя не указано, команда ssh использует текущее имя пользователя системы.
Чтобы войти как другой пользователь, укажите имя пользователя и хост в следующем формате:
ssh username@hostname
Имя пользователя также можно указать с помощью опции -l:
ssh -l username hostname
По умолчанию, когда порт не указан, клиент SSH будет пытаться подключиться к удаленному серверу через порт 22. На некоторых серверах администраторы изменяют порт SSH по умолчанию, чтобы добавить дополнительный уровень безопасности для сервера за счет снижения риска автоматизированные атаки.
Чтобы подключиться к порту не по умолчанию, используйте опцию -p для указания порта:
ssh -p 5522 username@hostname
Если вы испытываете проблемы с аутентификацией или соединением, используйте опцию -v, чтобы сказать ssh для печати отладочных сообщений:
ssh -v username@hostname
Чтобы увеличить уровень детализации, используйте -vv или -vvv.
Команда ssh принимает несколько вариантов.
Если вы ежедневно подключаетесь к нескольким удаленным системам через SSH, вы обнаружите, что запоминать все удаленные IP-адреса, разные имена пользователей, нестандартные порты и различные параметры командной строки сложно, если не невозможно.
Клиент OpenSSH считывает параметры, установленные в файле конфигурации для каждого пользователя ( ~/.ssh/config). В этом файле вы можете хранить различные параметры SSH для каждого удаленного компьютера, к которому вы подключаетесь.
Пример конфигурации SSH показан ниже:
Host dev HostName dev.andreyex.ru User mike Port 4422
При запуске клиента ssh с помощью команды ssh dev, команда прочитает файл ~/.ssh/config и будет использовать сведения о соединении, указанные для хоста dev. В этом примере ssh dev эквивалентно следующему:
ssh -p 4422 mike@dev.andreyex.ru
Для получения дополнительной информации проверьте статью о файле конфигурации SSH.
Протокол SSH поддерживает различные механизмы аутентификации.
Механизм аутентификации на основе открытого ключа позволяет вам войти на удаленный сервер без необходимости ввода пароля.
Этот метод работает путем генерации пары криптографических ключей, которые используются для аутентификации. Закрытый ключ хранится на клиентском устройстве, а открытый ключ передается на каждый удаленный сервер, на котором вы хотите войти. Удаленный сервер должен быть настроен для принятия проверки подлинности ключа.
Если у вас уже нет пары ключей SSH на вашем локальном компьютере, вы можете сгенерировать ее, набрав:
ssh-keygen -t rsa -b 4096 -C "your_email@domain.com"
Вам будет предложено ввести безопасную фразу-пароль. Хотите ли вы использовать фразу-пароль, решать только вам.
Получив пару ключей, скопируйте открытый ключ на удаленный сервер:
ssh-copy-id username@hostname
Введите пароль удаленного пользователя, и открытый ключ будет добавлен в файл authorized_keys удаленного пользователя.
После загрузки ключа вы можете войти на удаленный сервер без запроса пароля.
Установив аутентификацию на основе ключей, вы можете упростить процесс входа в систему и повысить общую безопасность сервера.
Туннелирование SSH или переадресация SSH-порта — это метод создания зашифрованного SSH-соединения между клиентом и серверным компьютером, через который можно ретранслировать сервисные порты.
Пересылка SSH полезна для передачи сетевых данных служб, которые используют незашифрованный протокол, таких как VNC или FTP, для доступа к контенту с географическим ограничением или обхода промежуточных межсетевых экранов. По сути, вы можете перенаправить любой порт TCP и туннелировать трафик через безопасное соединение SSH.
Существует три типа переадресации портов SSH:
Переадресация локального порта позволяет переадресовать соединение с клиентского хоста на хост сервера SSH, а затем на порт хоста назначения.
Чтобы создать локальную переадресацию портов, передайте опцию -L клиенту ssh:
ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION_HOST:DESTINATION_PORT -N -f username@hostname
Опция -f указывает команде ssh запускаться в фоновом режиме, а -N — не выполнять удаленную команду.
Переадресация удаленных портов является противоположностью переадресации локальных портов. Он перенаправляет порт с хоста сервера на хост клиента, а затем на порт хоста назначения.
Опция -L указывает ssh создать перенаправление на удаленный порт:
ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT -N -f username@hostname
Динамическая переадресация портов создает прокси-сервер SOCKS, который обеспечивает связь через ряд портов.
Чтобы создать динамическую переадресацию портов (SOCKS), передайте опцию -D клиенту ssh:
ssh -R [LOCAL_IP:]LOCAL_PORT -N -f username@hostname
Для подключения к удаленному серверу через SSH используйте команду ssh, за которой следуют имя удаленного пользователя и имя хоста (ssh username@hostname).
Знание того, как использовать команду ssh, необходимо для управления удаленным сервером.
Если у вас есть какие-либо вопросы, пожалуйста, оставьте комментарий ниже.