Команда SSH: использование опций -l, -p, -i и проверка ошибок подключения
Команда SSH — это команда клиента OpenSSH, которая в виде ssh учётная-запись@адрес-сервера подключается к удалённому Linux-серверу по зашифрованному соединению и выполняет команды на сервере, к которому подключилась. Мы запускали ssh с сервера AlmaLinux 9 на сервер Debian 12 и по порядку проверили всё: от проверки ключа хоста при первом подключении до опций -l, -p и -i, выполнения удалённых команд и отладочного вывода -v. Выяснилось, что то, как опции применяются на самом деле, можно заранее проверить с помощью ssh -G, не подключаясь.
Вывод ниже — это результат на двух серверах без изменений. Адрес сервера и учётная запись, имя хоста, путь и отпечаток ключа, а также номера версий OpenSSL и ядра подключающегося сервера заменены примерными значениями. Подключающийся сервер AlmaLinux использует учётную запись root, а принимающий подключение сервер Debian — обычную учётную запись.
1️⃣ Основы использования команды SSH
Чтобы войти на удалённый сервер, после ssh пишут имя учётной записи и адрес сервера, соединённые знаком @. После входа приглашение меняется на приглашение подключённого сервера, а ввод exit закрывает соединение и возвращает на исходный сервер.
ssh user@192.0.2.10Linux server2 6.1.0-53-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.187-1 (2026-09-07) x86_64
Last login: Wed Oct 28 20:27:41 2026 from 198.51.100.7
[user]:~$ whoami
user
[user]:~$ exit
exit
Connection to 192.0.2.10 closed.Сервер Debian, к которому мы подключались, при входе показал ещё несколько строк сообщения сервера (motd) и уведомление о почте; в выводе выше убраны только эти строки.
При первом подключении к серверу ssh до входа выводит отпечаток ключа хоста сервера и спрашивает, продолжать ли подключение. После ввода yes ключ хоста сохранился в ~/.ssh/known_hosts, а затем появился результат whoami.
ssh user@192.0.2.10 whoamiThe authenticity of host '192.0.2.10 (192.0.2.10)' can't be established.
ED25519 key fingerprint is SHA256:9fT2kL0qX8vN4cR1yB6sW3mZ7aH5dE0uJ2pG8oK1iVc.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.
userПосле сохранения ключа в known_hosts этот вопрос при подключении к тому же серверу больше не появлялся. Если отпечаток отличается от значения, полученного от администратора сервера, введите no. После ввода no ssh завершился без подключения.
ssh user@192.0.2.10The authenticity of host '192.0.2.10 (192.0.2.10)' can't be established.
ED25519 key fingerprint is SHA256:9fT2kL0qX8vN4cR1yB6sW3mZ7aH5dE0uJ2pG8oK1iVc.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? no
Host key verification failed.При завершении через no файл known_hosts не был создан. Поэтому при следующем подключении тот же вопрос появится снова.
2️⃣ Опции команды SSH
Опции ssh пишутся перед целью подключения. При запуске одного ssh список доступных опций вывелся в виде справки по использованию.
sshusage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface] [-b bind_address]
[-c cipher_spec] [-D [bind_address:]port] [-E log_file]
[-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file]
[-J destination] [-L address] [-l login_name] [-m mac_spec]
[-O ctl_cmd] [-o option] [-P tag] [-p port] [-R address]
[-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
destination [command [argument ...]]
ssh [-Q query_option]Если указать опцию, которой нет в справке по использованию, появится ошибка [unknown option] вместе с той же справкой.
-V выводит установленную версию клиента OpenSSH. Ниже — результат подключающегося сервера AlmaLinux; на принимающем подключение сервере Debian 12 появилось OpenSSH_9.2p1.
ssh -VOpenSSH_9.9p1, OpenSSL 3.5.1 1 Jul 2025-G не подключается к серверу, а объединяет указанные опции с файлами конфигурации и выводит значения, которые будут применены на самом деле. Полный вывод — 87 строк, поэтому нужные строки мы отбираем через grep.
ssh -G user@example.com | grep -E "^(user|hostname|port|identityfile|connecttimeout|stricthostkeychecking|serveraliveinterval) "user user
hostname example.com
port 22
stricthostkeychecking ask
serveraliveinterval 0
identityfile ~/.ssh/id_rsa
identityfile ~/.ssh/id_ecdsa
identityfile ~/.ssh/id_ecdsa_sk
identityfile ~/.ssh/id_ed25519
identityfile ~/.ssh/id_ed25519_sk
identityfile ~/.ssh/id_xmss
identityfile ~/.ssh/id_dsa
connecttimeout noneСемь строк identityfile — это файлы ключей по умолчанию, которые ssh по порядку ищет, если -i не указан. connecttimeout none означает, что время ожидания подключения отдельно не задано.
| Опция | Копировать | Описание |
|---|---|---|
| -lУчётная запись | Указывает имя учётной записи для подключения | |
| -pПорт | Указывает порт подключения (по умолчанию 22) | |
| -iФайл ключа | Указывает файл закрытого ключа | |
| -v | Выводит ход подключения строками debug1 | |
| -C | Сжимает передаваемые данные | |
| -X | Перенаправление X11 (удалённые GUI-программы) | |
| -T | Не выделяет псевдотерминал | |
| -t | Принудительно выделяет псевдотерминал | |
| -n | Перенаправляет стандартный ввод в /dev/null | |
| -q | Сокращает предупреждения и информационные сообщения | |
| -oпараметр=значение | Задаёт параметр файла конфигурации только для этого подключения | |
| -L | Локальный проброс портов | |
| -F | Указывает файл конфигурации | |
| -G | Выводит применяемые настройки без подключения | |
| -V | Выводит версию клиента OpenSSH |
| Опция | Копировать | Описание |
|---|---|---|
| -N | Только держит соединение, без удалённой команды | |
| -J | Подключается через другой сервер |
3️⃣ Опция ssh -l и проброс портов с -L
-l — это опция, указывающая имя учётной записи для подключения. ssh -l user 192.0.2.10 подключился под той же учётной записью, что и ssh user@192.0.2.10.
ssh -l user 192.0.2.10 whoamiuserПроверка через -G показала, что учётная запись из -l попала в пункт user.
ssh -G -l admin example.com | grep -E "^(user|hostname|port) "user admin
hostname example.com
port 22Через -G мы проверили и то, что применяется, если указать одновременно -l и учётная-запись@адрес. В OpenSSH 9.9p1 применился admin, указанный в -l.
ssh -G -l admin user@example.com | grep -E "^(user|hostname) "user admin
hostname example.comЗаглавная -L похожа по названию, но это опция локального проброса портов, не связанная с учётной записью. Она пропускает соединения, приходящие на порт вашего сервера, через SSH-соединение и связывает их с адресом и портом на стороне удалённого сервера.
8080:localhost:80 означает связать порт 8080 вашего сервера с портом 80 localhost, если смотреть с удалённого сервера. Проверка через -G показала то же значение в пункте localforward.
ssh -G -L 8080:localhost:80 user@example.com | grep -E "^(hostname|localforward) "hostname example.com
localforward 8080 [localhost]:80Если нужно только держать туннель открытым, добавьте ещё -N, которая поддерживает соединение без удалённой команды.
4️⃣ Указание порта и файла ключа SSH
Если SSH-сервер принимает подключения на порту, отличном от 22, укажите порт через -p. -i указывает файл закрытого ключа с нестандартным именем.
ssh -G -p 2222 -i ./mykey user@example.com | grep -E "^(user|hostname|port|identityfile) "user user
hostname example.com
port 2222
identityfile ./mykeyПосле указания -i семь строк файлов ключей по умолчанию исчезли, и остался только указанный файл.
Файлы ключей создаются через ssh-keygen. Если ключ уже используется, задайте в -f новое имя файла. Ниже — результат создания ключа ed25519 с новым именем mykey.
ssh-keygen -t ed25519 -f ./mykey -N "" -C "user@example.com"Generating public/private ed25519 key pair.
Your identification has been saved in ./mykey
Your public key has been saved in ./mykey.pub
The key fingerprint is:
SHA256:XLbhLZHSNdMvUqhSIbzRNJi/zKKkNnWmy0mTeBoUfaY user@example.com
The key's randomart image is:
+--[ED25519 256]--+
| ..=+.+o |
| . =oo+.oo |
| . . +=B. . . |
| . =o=o=. . .|
| . E S++... . |
| . .o.+ +. |
| o+== . |
| +*oo |
| ...+. |
+----[SHA256]-----+mykey — закрытый ключ, а mykey.pub — открытый ключ. Руководство OpenSSH предписывает поместить открытый ключ в ~/.ssh/authorized_keys на сервере, к которому вы подключаетесь. Это делается через ssh-copy-id, например [ssh-copy-id -i ./mykey.pub user@192.0.2.10].
Если вы часто подключаетесь к одному серверу, запишите псевдоним в ~/.ssh/config и вводите только ssh и псевдоним. Строка Host — это псевдоним, а строки под ней — значения, применяемые при подключении по этому псевдониму.
Host myserver
HostName 192.0.2.10
User user
Port 2222
IdentityFile ~/.ssh/mykeyКогда мы записали эти настройки в файл ./config и прочитали его через -F, адрес, учётная запись, порт и файл ключа применились по одному псевдониму.
ssh -F ./config -G myserver | grep -E "^(user|hostname|port|identityfile) "user user
hostname 192.0.2.10
port 2222
identityfile ~/.ssh/mykeyОпции, указанные в командной строке, имеют приоритет над файлом конфигурации. Когда мы добавили -p 22 к тому же псевдониму, port сменился на 22.
ssh -F ./config -G -p 22 myserver | grep -E "^(hostname|port) "hostname 192.0.2.10
port 22hostname остался 192.0.2.10 из файла конфигурации, и сменился только port — на значение из командной строки.
5️⃣ Выполнение удалённых команд через SSH
Если после цели подключения написать команду, ssh выполнит только её без экрана входа и закроет соединение. Если команд несколько или в них есть символы оболочки вроде точки с запятой, заключите их в одинарные кавычки.
ssh user@192.0.2.10 'whoami; hostname'user
server2Код возврата удалённой команды вернулся без изменений как код возврата ssh. В скриптах по этому значению судят, успешно ли выполнилась удалённая команда.
ssh user@192.0.2.10 'exit 3'; echo $?3При таком запуске команды псевдотерминал не выделяется. tty, запущенный с -T, вывел [not a tty].
ssh -T user@192.0.2.10 ttynot a ttyРуководство ssh описывает -t как опцию для запуска полноэкранных программ на удалённом сервере. С -t появилось /dev/pts/0, а в конце ещё и сообщение о закрытии соединения.
ssh -t user@192.0.2.10 tty/dev/pts/0
Connection to 192.0.2.10 closed.С добавлением -q это сообщение не появилось.
ssh -t -q user@192.0.2.10 tty/dev/pts/0-n перенаправляет стандартный ввод ssh в /dev/null. Без -n удалённый cat вывел как есть hello, переданный через конвейер.
echo hello | ssh user@192.0.2.10 cathelloecho hello | ssh -n user@192.0.2.10 catС -n в той же команде hello не дошёл до удалённого cat, и ничего не было выведено.
6️⃣ Ошибки подключения SSH и отладка с ssh -v
Если подключиться не удаётся, сначала по сообщению об ошибке определите, на каком этапе всё остановилось. Когда адрес сервера не нашёлся, появилось [Could not resolve hostname].
ssh user@nosuchhost.invalidssh: Could not resolve hostname nosuchhost.invalid: Name or service not knownЕсли адрес верный, но на этом порту никто не отвечает, появляется [Connection timed out]. С -o ConnectTimeout=5 попытка завершилась этой ошибкой через 5 секунд.
ssh -o ConnectTimeout=5 -p 2222 user@192.0.2.10ssh: connect to host 192.0.2.10 port 2222: Connection timed outПри подключении с -o BatchMode=yes к серверу, которого нет в known_hosts, ssh завершился с [Host key verification failed.], не спрашивая о ключе хоста. Чтобы первое подключение в скрипте не останавливалось на вопросе, используют StrictHostKeyChecking=accept-new.
ssh -o BatchMode=yes user@192.0.2.10 trueHost key verification failed.Согласно руководству ssh_config, accept-new без вопроса сохраняет ключ хоста только ранее не встречавшихся серверов. Если приходит ключ, отличный от сохранённого, подключение отклоняется.
ssh -o StrictHostKeyChecking=accept-new user@192.0.2.10 whoamiWarning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.
userЕсли для учётной записи не зарегистрирован ключ, появляется [Permission denied (publickey)]. Повторяющиеся ошибки аутентификации могут привести к тому, что сервер заблокирует подключающийся IP.
-v выводит ход подключения строками debug1. Полный вывод превышает 70 строк, поэтому ниже только строки этапов подключения и аутентификации, отобранные через grep.
ssh -v -i ~/.ssh/id_ed25519 user@192.0.2.10 true 2>&1 | grep -E 'Connecting to|Connection established|remote software version|Server host key|is known and matches|can continue|Offering public key|Authenticated to|Exit status'debug1: Connecting to 192.0.2.10 [192.0.2.10] port 22.
debug1: Connection established.
debug1: Remote protocol version 2.0, remote software version OpenSSH_9.2p1 Debian-2+deb12u10
debug1: Server host key: ssh-ed25519 SHA256:9fT2kL0qX8vN4cR1yB6sW3mZ7aH5dE0uJ2pG8oK1iVc
debug1: Host '192.0.2.10' is known and matches the ED25519 host key.
debug1: Authentications that can continue: publickey,password
debug1: Offering public key: /root/.ssh/id_ed25519 ED25519 SHA256:4bN7qT1xW9cK3mR6yH0sD2fL8vZ5aJ1eP7uG3oX4iQs explicit
Authenticated to 192.0.2.10 ([192.0.2.10]:22) using "publickey".
debug1: Exit status 0Строка Connecting to — это попытка подключения, а строки Server host key и is known and matches — проверка ключа хоста. В строке Offering public key ключ был предложен, а в строке Authenticated to аутентификация по ключу завершилась. Если всё останавливается на аутентификации, сначала проверьте, появляется ли нужный файл ключа в строке Offering public key.
С добавлением -C значение compression в строке kex сменилось с none на zlib@openssh.com.
ssh -v -C user@192.0.2.10 true 2>&1 | grep -E 'compression'debug1: kex: server->client cipher: aes256-gcm@openssh.com MAC: <implicit> compression: zlib@openssh.com
debug1: kex: client->server cipher: aes256-gcm@openssh.com MAC: <implicit> compression: zlib@openssh.com
debug1: Enabling compression at level 6.-X — это опция, которая выводит окна GUI-программ удалённого сервера на ваш компьютер. При запуске на сервере AlmaLinux без экрана появилась строка debug1 о том, что DISPLAY нет.
ssh -v -X user@192.0.2.10 true 2>&1 | grep DISPLAYdebug1: X11 forwarding requested but DISPLAY not setDISPLAY — это переменная окружения, задающая, где показывать окна GUI. Поэтому -X используют при подключении с компьютера с рабочим столом.
🔲 Симулятор команды SSH
В симуляторе ниже можно подключиться по ssh к виртуальному серверу и самостоятельно ввести и проверить опции, удалённые команды и ssh -G.
🔢 FAQ & рекомендуемые материалы
SSH
SSH в Linux: определение и базовая настройка
Статья о происхождении SSH, пришедшего на смену нешифрованному Telnet, стандартном порте 22, аутентификации по ключу и установке.
Безопасность
Уязвимость OpenSSH CVE-2024-6387: временная блокировка и установка патча
Статья о том, как уязвимость OpenSSH regreSSHion использует сигнал alarm времени ожидания входа, и о порядке, в котором мы применили временную блокировку, а затем патч.
Cloudways
Как подключиться к Cloudways по SFTP & SSH: настройка FileZilla, регистрация SSH-ключа и белый список IP
Статья о регистрации SSH-ключа на управляемом облачном сервере, добавлении подключающегося IP в белый список и подключении через ssh и FileZilla.
ℹ️ О партнёрских ссылках
Материалы этого сайта содержат партнёрские ссылки. Если посетитель покупает товар или услугу по такой ссылке, сайт получает комиссию от продавца. При этом сумма, которую платит покупатель (при акционных скидках сумма снижается ↓), не увеличивается. Указанные цены, скидки и наличие актуальны на момент написания и могут отличаться, поэтому перед покупкой уточняйте их у продавца. Товары выбираются и оцениваются по нашим собственным критериям, а комиссия не влияет ни на порядок, ни на содержание обзоров.