В прошлом посте мы завершили подготовку для безопасного SSH-доступа с помощью генерации ключей SSH (Key Generation).
Смотрите предыдущий пост: SSH keygen: идеальное руководство для начинающих
Теперь пришло время узнать, как на практике использовать SSH для подключения к удалённому серверу. Команды SSH проще, чем вы думаете, но если вы знаете несколько принципов и полезных опций, вы сможете пользоваться ими гораздо эффективнее.
Как написать команду SSH?
Основной формат команды SSH выглядит следующим образом:
ssh [опции] [имя_пользователя]@[адрес_хоста] [команда]
Давайте подробнее рассмотрим, что означает каждый элемент.
-
ssh
: команда для запуска клиента SSH. -
[опции]
: вы можете указать различные опции для управления способом подключения SSH. Например, вы можете использовать определённый файл ключа или установить пересылку портов. (Подробности далее.) -
[имя_пользователя]
: имя учетной записи пользователя на удалённом сервере, к которому вы хотите подключиться. Если имя пользователя на локальном компьютере совпадает с именем пользователя на удалённом сервере, его можно опустить. -
[адрес_хоста]
: IP-адрес или доменное имя удалённого сервера, к которому вы хотите подключиться. -
[команда]
(по желанию): если есть команда, которую вы хотите выполнить сразу после подключения к удалённому серверу, укажите её здесь. После выполнения этой команды SSH-сессия будет завершена. Если этот элемент опустить, вы сможете войти на сервер и использовать интерактивную оболочку (Shell).
Принципы написания команд и лёгкие советы для запоминания
Команда SSH ясно показывает, "какой пользователь подключается к какому серверу?".
-
Основной принцип:
ssh имя_пользователя@адрес_хоста
- Пример:
ssh ubuntu@192.168.1.100
(подключение к учётной записиubuntu
на сервере 192.168.1.100) - Пример:
ssh root@mywebserver.com
(подключение к учётной записиroot
на сервере https://www.google.com/search?q=mywebserver.com) -
Лёгкий способ запомнить:
-
"Я (локальный пользователь) хочу зайти к кому-то (удалённый пользователь) там (на удалённом сервере)!"
ssh
(я хочу подключиться)[имя_пользователя]@
(к кому)[адрес_хоста]
(куда)- Для часто используемых серверов можно использовать файл
~/.ssh/config
, чтобы не вводить каждый раз длинный адрес, а подключаться с помощью псевдонима (Alias). (Эта тема будет подробно рассмотрена в следующем посте!)
- Пример:
Полезные опции SSH
SSH предлагает множество опций, которые предоставляют мощные функции для различных сценариев. Позвольте мне представить несколько основных опций.
1. -i <IdentityFile>
: Указать конкретный файл закрытого ключа
Когда у вас есть несколько ключей SSH и вы хотите использовать конкретный закрытый ключ для подключения к определённому серверу, используется эта опция. По умолчанию используются ~/.ssh/id_rsa
или ~/.ssh/id_ed25519
, но это будет полезно, если вы создали ключ с другим именем или управляете несколькими ключами.
- Применение:
ssh -i ~/.ssh/my_custom_key ubuntu@my_server.com
-
Пример:
Bash
``` ssh -i ~/.ssh/id_ed25519_my_server ubuntu@example.com
Ожидаемый результат:
Введите пароль для ключа '/home/youruser/.ssh/id_ed25519_my_server': # введите пароль для подключения
```
2. -p <Port>
: Указать SSH-порт удалённого сервера
Большинство SSH-серверов по умолчанию используют порт 22. Однако по соображениям безопасности администраторы часто меняют порт SSH. В таких случаях следует использовать опцию -p
и указать изменённый номер порта.
- Применение:
ssh -p 2222 your_user@your_server.com
(подключение к порту 2222) -
Пример:
Bash
``` ssh -p 2222 myuser@192.168.1.100
Ожидаемый результат:
Подлинность хоста '192.168.1.100:2222 (...)' не может быть установлена.
Вы уверены, что хотите продолжить подключение (yes1/no/[fingerprint])? yes
Предупреждение: добавлен '192.168.1.100:2222' (ED25519) в список известных хостов.
Последний вход: пн, 17 июня 2024, 10:00:00 с вашего_ip
myuser@server:~ $
```
3. -X
: Включение X11-пересылки (запуск графических программ)
Используется, если на удалённом сервере установлены GUI (графические интерфейсы пользователя) приложения, и вы хотите использовать их на экране локального компьютера. Используется система X Window, и на локальной системе должен работать X сервер (например, XQuartz для macOS, PuTTY + VcXsrv для Windows и т.д.).
- Применение:
ssh -X your_user@your_server.com
-
Пример:
```Bash ssh -X myuser@remote-gui-server.com
Запуск firefox на удалённом сервере (окно firefox отображается на локальном экране)
myuser@remote-gui-server:~ $ firefox & ```
(Это может быть неудобно, если производительность низкая или сеть сильно задерживается.)
4. -L <LocalPort>:<RemoteHost>:<RemotePort>
: Локальная пересылка портов (Local Port Forwarding)
Эта функция передает соединения, приходящие на определённый порт локального компьютера (LocalPort), через SSH-туннель к определённому порту на удалённом сервере (RemoteHost). Обычно используется для подключения к сервисам за фаерволом или когда локальное приложение должно подключаться к удалённой базе данных.
- Применение:
ssh -L 8080:localhost:80 your_user@your_server.com
- Эта команда передает все соединения, приходящие на 8080 порт локального компьютера, через
your_server.com
к 80 порту внутриyour_server.com
(localhost:80
означает самyour_server.com
).
- Эта команда передает все соединения, приходящие на 8080 порт локального компьютера, через
-
Пример:
-
Когда вы не можете напрямую подключиться к веб-серверу на удалённом сервере (80 порт), но можете подключиться только через SSH:
```Bash ssh -L 8080:localhost:80 myuser@my_web_server.com
После выполнения этой команды, если вы перейдете в веб-браузер на http://localhost:8080
это будет эквивалентно подключению к 80 порту my_web_server.com.
```
-
Если локальное приложение
my_db_app
должно подключаться к 3306 порту MySQL удаленногоdb_server.internal
, ноdb_server.internal
доступен только черезmy_app_server.com
:```Bash ssh -L 3307:db_server.internal:3306 myuser@my_app_server.com
После выполнения этой команды, когда
my_db_app
подключается к localhost:3307это приведет к подключению к 3306 порту db_server.internal через my_app_server.com.
```
(Использование 3307 связано с тем, что на локальном компьютере может быть уже работающий MySQL на порту 3306.)
-
5. -N
: Поддерживать только пересылку портов без выполнения удалённых команд
Используется вместе с опциями -L
или -D
(Динамическая пересылка портов, SOCKS прокси), чтобы открыть SSH-сессию, но не запускать команду оболочки на удалённом сервере, а просто поддерживать функцию пересылки портов. Обычно используется для поддержания туннеля пересылки портов в фоновом режиме.
- Применение:
ssh -N -L 8080:localhost:80 your_user@your_server.com
-
Пример:
```Bash ssh -N -L 8080:localhost:80 myuser@my_web_server.com &
Поддержание туннеля пересылки портов в фоновом режиме (&) для доступа локально через веб-браузер
```
6. -f
: Перевести SSH-сессию в фон
Эта опция отправляет процесс клиента SSH в фоновый режим после успешного подключения SSH. Обычно используется вместе с опцией -N
для сохранения туннеля пересылки портов в фоновом режиме.
- Применение:
ssh -f -N -L 8080:localhost:80 your_user@your_server.com
-
Пример:
```Bash ssh -f -N -L 8080:localhost:80 myuser@my_web_server.com
После выполнения этой команды управление терминалом будет немедленно возвращено, а SSH-туннель будет выполняться в фоновом режиме.
Вы можете проверить процесс с помощью команды ps aux | grep ssh
```
В заключение
В этом посте мы рассмотрели основную структуру команд SSH и часто используемые ключевые опции. Особенно рекомендую запомнить указание порта с помощью -p
и пересылку портов с помощью -L
, поскольку они используются очень часто на практике.
В следующем посте мы узнаем, как использовать файл ~/.ssh/config
для удобного управления SSH-доступом. Если у вас есть вопросы, не стесняйтесь оставлять их в комментариях!
Комментариев нет.