Основные команды SSH для системных администраторов

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

35 просмотров

Основные команды SSH для системных администраторов

Введение

Secure Shell (SSH) — это основа безопасного удаленного администрирования серверов и сетевых устройств. Для системных администраторов овладение SSH — это не просто навык, а фундаментальная необходимость для эффективного и безопасного управления инфраструктурой. SSH обеспечивает защищенный канал поверх незащищенной сети, используя сильное шифрование, гарантируя, что все коммуникации, включая пароли, команды и передачу файлов, остаются конфиденциальными и защищенными от прослушивания.

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

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

Установление базовых SSH-соединений

Наиболее фундаментальное использование SSH — это создание безопасной интерактивной сессии оболочки с удаленным сервером. Базовый синтаксис прост и позволяет указать пользователя и целевой хост.

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

Для подключения к удаленному серверу, используя ваше текущее локальное имя пользователя:

ssh hostname_or_IP_address

Если ваше имя пользователя на удаленном сервере отличается от локального, вам необходимо его указать:

ssh username@hostname_or_IP_address

Пример:

ssh [email protected]
ssh [email protected]

Указание пользовательского порта

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

ssh -p 2222 username@hostname_or_IP_address

Совет: Изменение порта SSH по умолчанию (порт 22) является распространенной практикой безопасности для уменьшения числа автоматизированных попыток взлома, хотя это не заменяет надежной аутентификации.

Аутентификация по SSH-ключам

Хотя парольная аутентификация распространена, аутентификация по ключам является рекомендуемым и более безопасным методом для SSH. Она использует пару криптографических ключей: закрытый ключ (хранится в секрете на вашей локальной машине) и открытый ключ (размещается на удаленном сервере).

Генерация пар SSH-ключей

Используйте ssh-keygen для создания новой пары ключей. Рекомендуется использовать надежный пароль для вашего закрытого ключа.

ssh-keygen -t rsa -b 4096

Эта команда генерирует пару ключей RSA длиной 4096 бит. Закрытый ключ (id_rsa) и открытый ключ (id_rsa.pub) обычно сохраняются в каталоге ~/.ssh/.

Копирование открытого ключа на удаленный сервер

Чтобы включить аутентификацию по ключам, ваш открытый ключ должен быть помещен в файл ~/.ssh/authorized_keys на удаленном сервере. Утилита ssh-copy-id автоматизирует этот процесс:

ssh-copy-id username@hostname_or_IP_address

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

Предупреждение: Никогда не делитесь своим закрытым ключом ни с кем. Он должен иметь строгие права доступа к файлу (chmod 600 ~/.ssh/id_rsa).

Управление SSH-соединениями и конфигурациями

Выполнение одной команды удаленно

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

ssh username@hostname_or_IP_address 'command_to_execute'

Пример:

ssh [email protected] 'ls -l /var/log/'
ssh [email protected] 'sudo apt update && sudo apt upgrade -y'

Использование файла конфигурации SSH (~/.ssh/config)

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

Пример записи в ~/.ssh/config:

Host webserver
    Hostname 192.168.1.100
    User admin
    Port 2222
    IdentityFile ~/.ssh/id_rsa_web
    ForwardAgent yes

Host devbox
    Hostname dev.mydomain.com
    User developer
    Port 22
    IdentityFile ~/.ssh/id_rsa_dev

После настройки вы можете подключиться, просто используя псевдоним:

ssh webserver
ssh devbox

Лучшая практика: Всегда используйте файл ~/.ssh/config для управления сложными SSH-соединениями. Это улучшает читаемость, уменьшает ошибки набора текста и централизует ваши настройки.

Безопасная передача файлов с помощью SSH

SSH предоставляет два основных инструмента для безопасной передачи файлов: scp и sftp.

scp (Secure Copy Protocol)

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

Копирование файла с локального хоста на удаленный

scp /path/to/local/file username@hostname_or_IP_address:/path/to/remote/directory/

Пример:

scp my_app.tar.gz admin@webserver:/var/www/html/

Копирование файла с удаленного хоста на локальный

scp username@hostname_or_IP_address:/path/to/remote/file /path/to/local/directory/

Пример:

scp admin@webserver:/var/log/nginx/access.log ~/logs/

Рекурсивное копирование каталога

Используйте флаг -r для каталогов:

rscp -r /path/to/local/dir username@hostname_or_IP_address:/path/to/remote/parent_dir/

Сохранение атрибутов файла

Для сохранения времени изменения, времени доступа и режимов используйте флаг -p:

scp -p localfile user@remotehost:/remotepath/

sftp (SSH File Transfer Protocol)

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

Подключение к SFTP-серверу

sftp username@hostname_or_IP_address

После подключения вы получите приглашение sftp>. Общие команды включают:

  • ls: Вывести содержимое удаленного каталога
  • lls: Вывести содержимое локального каталога
  • cd remote_directory: Сменить удаленный каталог
  • lcd local_directory: Сменить локальный каталог
  • get remote_file: Скачать файл
  • put local_file: Загрузить файл
  • mget remote_files: Скачать несколько файлов (поддерживаются подстановочные знаки)
  • mput local_files: Загрузить несколько файлов (поддерживаются подстановочные знаки)
  • exit или bye: Выход из сеанса SFTP

Пример сеанса SFTP:

sftp [email protected]
Connected to 192.168.1.100.
sftp> ls
config.ini  data/  logs/  public_html/
sftp> cd public_html
sftp> get index.html
Fetching /public_html/index.html to index.html
sftp> put new_page.html
Uploading new_page.html to /public_html/new_page.html
sftp> bye

SSH-туннелирование и перенаправление портов

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

Локальное перенаправление портов (-L)

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

ssh -L [local_port]:[remote_host]:[remote_port] username@ssh_server

Пример: Доступ к серверу баз данных (порт 3306) в частной сети через промежуточный хост ssh_server с локального порта 9000 вашей локальной машины.

ssh -L 9000:db.private.net:3306 [email protected]

Теперь вы можете подключиться к localhost:9000 на своей локальной машине, и соединение будет безопасно перенаправлено на db.private.net:3306 через jumphost.com.

Удаленное перенаправление портов (-R)

Удаленное перенаправление делает службу на вашей локальной машине (или локальной сети) доступной с удаленного сервера и, возможно, для клиентов в сети удаленного сервера.

ssh -R [remote_port]:[local_host]:[local_port] username@ssh_server

Пример: Сделать локальный веб-сервер (порт 8000) доступным с ssh_server на порту 8080.

ssh -R 8080:localhost:8000 admin@remote_server.com

Теперь любой пользователь на remote_server.com может получить доступ к вашему локальному веб-серверу, подключившись к localhost:8080 на remote_server.com.

Динамическое перенаправление портов (-D)

Динамическое перенаправление портов создает SOCKS-прокси, позволяя вам направлять весь ваш трафик (или трафик конкретного приложения) через SSH-туннель. Это полезно для обхода брандмауэров или обеспечения безопасности просмотра веб-страниц.

ssh -D [local_port] username@ssh_server

Пример: Создание SOCKS-прокси на порту 1080 вашей локальной машины через ssh_server.

ssh -D 1080 [email protected]

Настройте свой браузер или приложение на использование localhost:1080 в качестве SOCKS5-прокси, и весь его сетевой трафик будет туннелироваться через jumphost.com.

Продвинутое использование и советы по SSH

Запуск команд в фоновом режиме

Для неинтерактивных команд, которые должны выполняться и отсоединяться, вы можете использовать флаг -f (переход в фон перед выполнением команды) и -N (не выполнять удаленную команду).

ssh -f -N -L 9000:db.private.net:3306 [email protected]

Это устанавливает локальное перенаправление портов в фоновом режиме.

SSH-агент и ssh-add

ssh-agent — это программа, которая хранит ваши закрытые ключи в памяти, поэтому вам нужно вводить парольную фразу только один раз за сеанс. ssh-add добавляет ключи в агент.

# Запустить агент (если он еще не запущен)
eval "$(ssh-agent -s)"
# Добавить ваши ключи в агент
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_web # Для конкретного ключа

ssh-agent имеет решающее значение при использовании ForwardAgent yes в ~/.ssh/config, позволяя вам использовать ваши локальные ключи для аутентификации с промежуточного хоста на последующие серверы без размещения вашего закрытого ключа на промежуточном хосте.

Постоянные SSH-соединения (ControlMaster)

Для более быстрого подключения и уменьшения накладных расходов ControlMaster в вашем ~/.ssh/config позволяет нескольким сеансам SSH совместно использовать одно сетевое соединение.

Host *
    ControlMaster auto
    ControlPath ~/.ssh/control/%r@%h:%p
    ControlPersist 4h

Эта конфигурация создает управляющий сокет для первого соединения (ControlMaster auto), и последующие подключения к тому же хосту будут повторно использовать этот сокет до 4 часов (ControlPersist 4h).

Устранение неполадок SSH

  • Permission Denied (Отказано в доступе): Проверьте права доступа к файлам для закрытых ключей (chmod 600 ~/.ssh/id_rsa), открытых ключей (chmod 644 ~/.ssh/id_rsa.pub) и каталога .ssh (chmod 700 ~/.ssh). На сервере убедитесь, что у ~/.ssh/authorized_keys права доступа chmod 600, а у ~/.sshchmod 700.
  • Connection Timed Out (Время ожидания соединения истекло): Сервер может быть недоступен, брандмауэр блокирует порт 22 (или пользовательский порт) или указан неверный IP-адрес.
  • Verbose Output (Подробный вывод): Используйте флаги -v, -vv или -vvv с ssh для получения подробной информации об отладке.
    bash ssh -vvv [email protected]

Заключение

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

Регулярно просматривайте свои SSH-конфигурации, используйте аутентификацию по ключам и применяйте мощные функции, такие как ~/.ssh/config и ssh-agent, чтобы оптимизировать свои ежедневные задачи. Имея в своем распоряжении эти основные команды SSH, вы будете хорошо подготовлены для уверенного и точного управления удаленными системами. Продолжайте практиковаться и изучать его обширные возможности, чтобы добиться еще большей эффективности в ваших административных обязанностях.