Сегодня в статье рассмотрим примеры использования SSH сессий в операционных системах семейства Linux.

Содержание
  1. 1. Установка SSH на Linux
  2. 2. Синтаксис команды SSH в Linux
  3. 3. Подключение к удалённому серверу по SSH в Linux
    1. 3.1. Использование файла конфигурации SSH
  4. 4. Копирование файлов по SSH
  5. 5. SSH socks-прокси сервер и динамическая переадресация портов.
    1. 5.1. Активация socks-прокси через терминал
    2. 5.2. Активация socks-прокси в Firefox
    3. 5.3. Активация socks-прокси в Chrome
    4. 5.4. Туннель SSH (переадресация портов)
    5. 5.5. Обратный SSH-туннель
    6. 5.6. Обратный прокси SSH
  6. 6. Создание постоянного туннеля (AUTOSSH)
    1. 6.1. Установка autossh
    2. 6.2. Создание конфигурационного файла
    3. 6.3. Пример туннеля autossh
  7. 7. Копирование ключа SSH (ssh-copy-id)
  8. 8. Удалённое выполнение команд (неинтерактивно)
  9. 9. Удалённый перехват пакетов и просмотр в Wireshark
  10. 10. Копирование локальной папки на удалённый сервер по SSH
  11. 11. Удалённые приложения GUI с переадресацией SSH X11
  12. 12. Удалённое копирование файлов с помощью rsync и SSH
  13. 13. SSH через сеть Tor
  14. 14. Редактирование текстовых файлов с помощью vim через ssh/scp
  15. 15. Монтирование удалённой директории через SSH с SSHFS
    1. 15.1. Установка sshfs
    2. 15.2. Монтирования при помощи sshfs
    3. 15.3. Размонтирование директории
  16. 16. Мультиплексирование SSH с помощью ControlPath
  17. 17. Потоковое видео по SSH с помощью VLC и SFTP
  18. 18. Прыжки по хостам с ssh и -J
  19. 19. Блокировка попыток брутфорса SSH с помощью iptables
  20. 20. Завершение

SSH (Secure Shell) – это протокол для удаленного доступа к серверу через интернет. Это один из самых распространенных инструментов системного администрирования Linux. В этой статье мы рассмотрим несколько примеров использования SSH, которые помогут вам выйти на новый уровень удаленного системного администрирования.

Содержание
  1. 1. Установка SSH на Linux
  2. 2. Синтаксис команды SSH в Linux
  3. 3. Подключение к удалённому серверу по SSH в Linux
    1. 3.1. Использование файла конфигурации SSH
  4. 4. Копирование файлов по SSH
  5. 5. SSH socks-прокси сервер и динамическая переадресация портов.
    1. 5.1. Активация socks-прокси через терминал
    2. 5.2. Активация socks-прокси в Firefox
    3. 5.3. Активация socks-прокси в Chrome
    4. 5.4. Туннель SSH (переадресация портов)
    5. 5.5. Обратный SSH-туннель
    6. 5.6. Обратный прокси SSH
  6. 6. Создание постоянного туннеля (AUTOSSH)
    1. 6.1. Установка autossh
    2. 6.2. Создание конфигурационного файла
    3. 6.3. Пример туннеля autossh
  7. 7. Копирование ключа SSH (ssh-copy-id)
  8. 8. Удалённое выполнение команд (неинтерактивно)
  9. 9. Удалённый перехват пакетов и просмотр в Wireshark
  10. 10. Копирование локальной папки на удалённый сервер по SSH
  11. 11. Удалённые приложения GUI с переадресацией SSH X11
  12. 12. Удалённое копирование файлов с помощью rsync и SSH
  13. 13. SSH через сеть Tor
  14. 14. Редактирование текстовых файлов с помощью vim через ssh/scp
  15. 15. Монтирование удалённой директории через SSH с SSHFS
    1. 15.1. Установка sshfs
    2. 15.2. Монтирования при помощи sshfs
    3. 15.3. Размонтирование директории
  16. 16. Мультиплексирование SSH с помощью ControlPath
  17. 17. Потоковое видео по SSH с помощью VLC и SFTP
  18. 18. Прыжки по хостам с ssh и -J
  19. 19. Блокировка попыток брутфорса SSH с помощью iptables
  20. 20. Завершение
  1. Удаленный доступ к серверу:

SSH позволяет подключаться к удаленному серверу и работать с ним через командную строку. Это может быть полезно, если вы хотите получить доступ к серверу, находящемуся в другом городе или даже стране. Например, если у вас есть сервер с веб-приложением, которое нужно обновлять, вы можете использовать SSH для обновления сервера удаленно.

  1. Управление конфигурациями:

SSH также может быть использован для управления конфигурациями сервера. Например, вы можете создать скрипт, который будет автоматически обновлять конфигурации сервера при каждом запуске. Это поможет вам избежать ошибок и упростить процесс обновления.

  1. Резервное копирование и восстановление:

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

  1. Мониторинг и управление процессами:

SSH можно использовать для мониторинга процессов на сервере и управления ими. Вы можете использовать команды типа “top” или “ps” для просмотра состояния процессов и управления ими через SSH.

  1. Управление пользователями и группами:

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

Установка SSH на Linux

Для подключения к удаленному серверу по SSH вам необходимо для начала установить сам клиент.

  • Если вы используете Ubuntu или Debian, то вы можете установить его с помощью менеджера пакетов Apt:
sudo apt-get install ssh
  • Если вы используете CentOS или Red Hat, то вы можете установить SSH-клиент с помощью менеджера пакетов Yum:
yum install openssh-clients

Синтаксис команды SSH в Linux

Синтаксис команды SSH выглядит следующим образом:

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 [user@]host[:port]] [-L address]
[-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
[-Q query_option] [-R address] [-S ctl_path] [-W host:port]
[-w local_tun[:remote_tun]] destination [command]

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

Подключение к удалённому серверу по SSH в Linux

В следующем примере используются обычные параметры, часто встречающиеся при подключении к удалённому серверу по SSH.

Откройте терминал и введите команду:

ssh username@server_ip
  • username – это имя пользователя на удаленном сервере
  • server_ip – это IP-адрес сервера.

Использование файла конфигурации SSH

Хотя многие знакомы с файлом sshd_config, есть ещё файл конфигурации клиента для команды ssh. расположение по умолчанию ~/.ssh/config, откроем его на редактирование:

nano ~/.ssh/config

Введем следующие данные:

# Alias для подключения
Host myserver
     # FQDN-имя или IP-адрес сервера
     HostName myserver.com 
     # Имя юзера на сервера
     User user
     # Порт для подключения
     Port 2222
     # Идентификационный файл
     IdentityFile /home/user/.ssh/myserver_rsa

В приведённом выше файле конфигурации ssh мы задали для хоста myserver параметры для подключения. Теперь чтобы подключиться к серверу достаточно набрать следующее:

ssh myserver

Данный файл конфигурации может сэкономить много времени на ввод параметров для подключения, позволяя автоматически применять продвинутую конфигурацию к конкретным хостам.

Копирование файлов по SSH

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

scp /home/user/download/myfile.txt user@myserver:/media/share/user/

В этом примере файл myfile.txt  расположенный в директории /home/user/download скопирован на хост  myserver в директорию /media/share/user.

А вот пример с использованием нестандартного порта для подключения:

scp -P 2222 /home/user/download/myfile.txt user@myserver:/media/share/user/

Если необходимо ещё указать идентификационный файл, то команда примет вид:

scp -i /home/user/.ssh/myserver_rsa -P 2222 /home/user/download/myfile.txt user@myserver:/media/share/user/

Вторая команда для копирования файлов по SSH это команда sftp. Для тех, кто знаком с консольным ftp, многие из команд похожи и в sftp. Вы можете сделать pushput и ls.

sftp user@myserver

Указываем порт и идентификационный файл:

sftp -P 222 -i ~/.ssh/myserver_rsa user@myserver

SSH socks-прокси сервер и динамическая переадресация портов.

SSH socks-proxy server и dynamic port forwarding – это способы обхода блокировок и ограничений на доступ к ресурсам в интернете. Они позволяют обойти ограничения доступа к сайтам, которые могут быть заблокированы провайдером интернета или правительством.

Socks-proxy server – это сервер, который находится за пределами зоны блокировок и перенаправляет запросы на нужные ресурсы через него. Для использования socks-proxy сервера нужно настроить его на локальном компьютере или на VPS-хостинге. Затем нужно настроить SSH-туннель на своем устройстве и указать socks-сервер в качестве прокси.

Dynamic port forwarding – это технология, которая позволяет динамически перенаправлять порты на локальном устройстве. Она работает на основе технологии SSH и позволяет обойти блокировки на уровне портов. Для использования dynamic port forwarding нужно настроить SSH на своем устройстве, а затем использовать специальные команды для перенаправления портов на нужный ресурс.

Оба метода имеют свои преимущества и недостатки, поэтому выбор зависит от конкретной ситуации и целей использования.

Активация socks-прокси через терминал

Клиент ssh может туннелировать трафик через прокси-сервер SOCKS одной простой командой.

ssh -D 8888 user@myserver

Проверим запустился ли наш Socks порт:

netstat -pan | grep 8888
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 127.0.0.1:8888          0.0.0.0:*               LISTEN      2564/ssh            
tcp6       0      0 ::1:8888                :::*                    LISTEN      2564/ssh            

Из вывода мы видим что socks-прокси запустился на TCP-порту 8888, 127.0.0.1 указывает, что служба работает только на localhost. Мы можем применить немного другую команду для прослушивания всех интерфейсов, включая ethernet и wifi, это позволит другим приложениям (браузерам и т д.) в нашей сети подключаться к прокси-сервису через ssh socks-прокси.

ssh -D 0.0.0.0:8888 user@myserver

Активация socks-прокси в Firefox

Теперь можем настроить браузер для подключения к socks-прокси. В Firefox выберите Настройки | Основные | Параметры соединения. Укажите IP-адрес и порт для подключения.

Обратите внимание на опцию в нижней части формы, чтобы DNS-запросы браузера тоже шли через прокси SOCKS. Если используете прокси-сервер для шифрования веб-трафика в локальной сети, то наверняка захотите выбрать эту опцию.

Активация socks-прокси в Chrome

Запуск Chrome с определёнными параметрами командной строки активирует socks-прокси, а также туннелирование DNS-запросов из браузера. Доверяй, но проверяй. Используйте tcpdump для проверки, что DNS-запросы больше не видны. Для запуска в терминале набираем:

google-chrome --proxy-server="socks5://127.0.0.1:8888"

Туннель SSH (переадресация портов)

Для переадресации локального порта используется ключ -L. Общий синтаксис команды таков:

ssh -L local_ip:local_port:remote_ip:remote_port user@hostname.com

Проброс удаленного порта на локальную машину

SSH-туннель просто открывает порт в вашей локальной системе, который подключается к другому порту на другом конце туннеля.

ssh  -L 4444:127.0.0.1:80 user@myserver

В примере выше мы с удаленного хоста и его локального адреса 127.0.0.1 и порта 80, пробрасываем туннель на наш localhost на порт 4444.

Далее в примере порты прослушивания связываются с другими узлами локальной сети.

ssh  -L 0.0.0.0:8080:127.0.0.1:80 user@myserver

Здесь мы подключаемся к порту 80 на удаленном веб-сервере и пробрасываем его на все наши адреса на порт 8080.

SSH-туннель на сторонний хост

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

ssh  -L 0.0.0.0:8080:10.10.10.10:80 user@myserver

Здесь мы пробрасываем туннель к веб-серверу, работающему на 10.10.10.10:80 через myserver (10.10.10.10 находится за myserver) на нашу локальную машину на все адреса по порту 8080. Веб-сервер на 10.10.10.10 будет считать myserver источником веб-запросов.

Обратный SSH-туннель

Общий синтаксис команды выглядит так:

ssh -R remote_port:local_ip:local_port user@hostname.ru

Здесь настроим прослушивающий порт на удалённом сервере, который будет подключаться обратно к локальному порту на нашем localhost (или другой системе).

ssh -v -R 0.0.0.0:1999:127.0.0.1:902 192.168.0.2 user@myserver

В этой SSH-сессии устанавливается соединение с порта 1999 на myserver к порту 902 на нашем локальном клиенте.

Проброс локального порта на удаленную машину

ssh -R 8081:10.10.10.10:80 user@myserver

После ввода данной команды на удаленном хосте myserver будет доступ до веб-сервера 10.10.10.10:80 по адресу http://localhost:8081.

Обратный прокси SSH

В этом случае мы устанавливаем socks-прокси на нашем ssh-соединении, однако прокси слушает на удалённом конце сервера. Подключения к этому удалённому прокси теперь появляются из туннеля как трафик с нашего localhost.

ssh -v -R 0.0.0.0:1999 192.168.1.100 user@myserver

Создание постоянного туннеля (AUTOSSH)

Для создания туннеля, который будет активен постоянно используется так называемая утилита аutossh. Единственно требование это необходимость настройки между двумя системами аутентификацию по публичным ключам, чтобы не получать запросы на ввод пароля при каждом обрыве и восстановлении соединения.

Установка autossh

По умолчанию, autossh не установлен в системе. Чтобы установить эту утилиту введем команду ниже.

sudo apt install autossh

Создание конфигурационного файла

Host myserver.ru
        IdentityFile /home/myuser/.ssh/ssh_id
        LocalForward 8080 127.0.0.1:80
  • Host – имя хоста, к которому мы хотим подключиться (myserver.ru в нашем случае)
  • IdentityFile – путь к нашему SSH-ключу
  • LocalForward – номер порта, на который мы будем перенаправлять трафик. В данном случае мы перенаправляем трафик с порта 8080 удаленного хоста myserver.ru на локальный адрес 127.0.0.1 и порт 80 соответственно.
autossh -M 0 -f -N ~/autossh_config
  • -M 0 – указывает, что мы не хотим использовать буфер памяти для хранения открытого соединения.
  • -f – запускает autossh в фоновом режиме.
  • -N – указывает, что соединение должно быть установлено в режиме “не-сессий”. Это означает, что соединение устанавливается только для выполнения команд, а не для интерактивного взаимодействия с удаленной системой.
  • ~/autossh_config – указывает, где находится конфигурационный файл для autossh

Пример туннеля autossh

Для запуска туннеля давайте наберем такую команду:

autossh -f -N -L 0.0.0.0:8080:10.10.10.10:80 user@myserver

Здесь мы пробрасываем туннель к веб-серверу, работающему на 10.10.10.10:80 через myserver (10.10.10.10 находится за myserver) на нашу локальную машину на все адреса по порту 8080. Веб-сервер на 10.10.10.10 будет считать myserver источником веб-запросов.

Копирование ключа SSH (ssh-copy-id)

Тут есть несколько способов, но эта команда экономит время, чтобы не копировать файлы вручную. Она просто копирует ~/.ssh/id_rsa.pub (или ключ по умолчанию) с вашей системы в ~/.ssh/authorized_keys на удалённом сервере.

ssh-copy-id user@myserver

Удалённое выполнение команд (неинтерактивно)

Команду ssh можно связать с другими командам для обычного удобного интерфейса. Просто добавьте команду, которую хотите запустить на удалённом хосте, в качестве последнего параметра в кавычках.

ssh myserver "cat /var/log/nginx/access.log" | grep badstuff.php

В данном примере grep выполняется на локальной системе после того, как лог скачался по ssh-каналу. Если файл большой, удобнее запустить grep на удалённой стороне, просто заключив обе команды в двойные кавычки.

Удалённый перехват пакетов и просмотр в Wireshark

Используем команду ниже для удалённого перехвата пакетов с выдачей результата непосредственно в GUI локального Wireshark.

ssh root@myserver 'tcpdump -c 1000 -nn -w - not port 22' | wireshark -k -i -

Копирование локальной папки на удалённый сервер по SSH

Красивый трюк, который сжимает папку с помощью bzip2 (это параметр -j в команде tar), а затем извлекает поток bzip2 на другой стороне, создавая на удалённом сервере дубликат папки.

localhost:~$ tar -cvj /datafolder | ssh remoteserver "tar -xj -C /datafolder"

Удалённые приложения GUI с переадресацией SSH X11

Если на клиенте и удалённом сервере установлены «иксы», то можно удалённо выполнить команду GUI, с окном на вашем локальном рабочем столе. Эта функция существует давным давно, но по-прежнему очень полезна. Запустите удалённый веб-браузер или даже консоль VMWawre Workstation, как я делаю в этом примере.

ssh -X user@myserver vmware

Требуется строка X11Forwarding yes в файле sshd_config.

Удалённое копирование файлов с помощью rsync и SSH

rsync во многом удобнее scp, если требуется периодическое резервное копирование каталога, большого количества файлов или очень больших файлов. Здесь есть функция восстановления после сбоя передачи и копирования только изменённых файлов, что сохраняет трафик и время.

В этом примере используется сжатие gzip (-z) и режим архивирования (-a), который включает рекурсивное копирование.

rsync -az /home/testuser/data myserver:backup/

SSH через сеть Tor

Анонимная сеть Tor может туннелировать SSH-трафик с помощью команды torsocks. Следующая команда прокинет ssh-прокси через Tor.

torsocks ssh user@myserver

Torsocks будет использовать для прокси порт 9050 на localhost. Как всегда при использовании Tor необходимо серьёзно проверять, какой трафик туннелируется и другие проблемы операционной безопасности (opsec) куда идут ваши DNS-запросы.

Редактирование текстовых файлов с помощью vim через ssh/scp

Для всех любителей vimэтот совет сэкономит немного времени. С помощью vim файлы редактируются по scp одной командой. Этот метод просто создаёт файл локально в /tmp, а затем копирует его обратно, как только мы его сохранили из vim.

vim scp://user@myserver//etc/hosts

Примечание: формат немного отличается от обычного scp. После хоста у нас двойной //. Это ссылка на абсолютный путь. Один слэш будет означать путь относительно домашней папки users.

Монтирование удалённой директории через SSH с SSHFS

SSHFS (SSH Filesystem) – это клиент файловой системы на основе fuse для монтирования удаленных каталогов по SSH-соединению. SSHFS использует протокол SFTP, который является подсистемой SSH и включен по умолчанию на большинстве серверов SSH.

При помощи sshfs мы можем подключить локальный каталог к удалённому серверу со всеми взаимодействиями файлов в зашифрованном сеансе ssh.

Установка sshfs

На Ubuntu и Debian установим пакет sshfs

sudo apt install sshfs

Монтирования при помощи sshfs

Примонтируем удалённый каталог к нашей системе.

sshfs user@myserver:/media/data ~/data/
  • /media/data – директория на удаленном сервере myserver.
  • ~/data/ – директория в домашнем каталоге пользователя.

Чтобы смонтировать удаленный каталог через /etc/fstab, используйте fuse.sshfs в качестве типа файловой системы.

sudo nano /etc/fstab
root@myserver:/media/data /home/myuser/data/ fuse.sshfs  defaults  0 0 

Другой пример с дополнительными опциями:

user@myserver:/media/data /home/myuser/data/ fuse.sshfs defaults,idmap=user,allow_other,reconnect,_netdev,users,port=2222,IdentityFile=/home/myuser/.ssh/id_rsa,allow_other,reconnect 0 0

Размонтирование директории

Размонтировать директорию можно командой:

fusermount -u /home/myuser/data/

Мультиплексирование SSH с помощью ControlPath

По умолчанию при наличии существующего подключения к удалённому серверу с помощью ssh второе подключение с помощью ssh или scp устанавливает новый сеанс с дополнительной аутентификацией. Опция ControlPath позволяет использовать существующий сеанс для всех последующих соединений. Это значительно ускорит процесс: эффект заметен даже в локальной сети, а тем более при подключении к удалённым ресурсам.

Host remoteserver
        HostName remoteserver.example.org
        ControlMaster auto
        ControlPath ~/.ssh/control/%r@%h:%p
        ControlPersist 10m

ControlPath указывает сокет для проверки новыми соединениями на предмет наличия активной сессии ssh. Последняя опция означает, что даже после выхода из консоли существующий сеанс останется открытым 10 минут, так что в течение этого времени вы сможете повторно подключиться по существующему сокету. Для дополнительной информации смотрите справку ssh_config man.

Потоковое видео по SSH с помощью VLC и SFTP

Даже давние пользователи ssh и vlc (Video Lan Client) не всегда знают об этой удобной опции, когда очень нужно посмотреть видео по сети. В настройках File | Open Network Stream программы vlc можно ввести местоположение как sftp://myserver. Если требуется пароль, появится запрос.

sftp://myserver//media/uploads/myvideo.mkv

Прыжки по хостам с ssh и -J

Если из-за сегментации сети приходится переходить через несколько хостов ssh, чтобы добраться до конечной сети назначения, вам сэкономит время ярлык -J.

ssh -J host1,host2,host3 myuser@myserver

Здесь главное понимать, что это не аналогично команде ssh host1, затем ssh host2 и т. д. Параметр -J хитро использует переадресацию, чтобы localhost устанавливал сеанс со следующим хостом в цепочке. Таким образом, в приведённом выше примере наш localhost аутентифицируется на host4. То есть используются наши ключи localhost, а сеанс от localhost до host4 полностью зашифрован.

Для такой возможности в ssh_config укажите опцию конфигурации ProxyJump. Если регулярно приходится переходить через несколько хостов, то автоматизация через конфиг сэкономит массу времени.

Блокировка попыток брутфорса SSH с помощью iptables

Любой, кто управлял сервисом SSH и просматривал логи, знает о количестве попыток брутфорса, которые происходят каждый час каждый день. Быстрый способ уменьшить шум в логах — перенести SSH на нестандартный порт. Внесите изменения в файл sshd_config с помощью параметра конфигурации Port.

С помощью iptables тоже можно легко блокировать попытки подключения к порту по достижении определённого порога. Простой способ сделать это — использовать OSSEC, поскольку он не только блокирует SSH, но выполняет кучу других мер по обнаружению вторжений на базе имени хоста (HIDS).

Завершение

Эти примеры, советы и команды ssh должны дать отправную точку; дополнительная информация о каждой из команд и возможностей доступна на справочных страницах (man sshman ssh_configman sshd_config).

[endtxt]

. . . .

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

5 1 голос
Рейтинг статьи

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов cookie) с использованием трекеров "Google Analytics" и "Yandex.Metrics". Порядок обработки Ваших персональных данных, а также реализуемые требования к их защите, содержатся в Политике конфиденциальности.
Принять