Table of Contents
ssh — безопасный удалённый доступ к серверам и туннелям: подключайся, проксируй порты (L/R/D), прыгай через бастионы и автоматизируй деплой.
📝 Топ‑20 самых полезных флагов ssh#
-p PORT— порт сервера (по умолчанию 22).-i KEY— приватный ключ (identity file).-J HOST[,HOST...]— jump‑host(ы), прокси‑прыжок (замена ProxyCommand).-L [bind:]LPORT:HOST:RPORT— локальный порт‑форвардинг.-R [bind:]RPORT:HOST:LPORT— удалённый порт‑форвардинг.-D [bind:]PORT— динамический SOCKS‑прокси.-N— не запускать удалённую команду (для туннелей).-f— уйти в фон после аутентификации (с-Nдля туннелей).-t/-tt— насильно выделить TTY (дляsudo,top,htop).-T— не выделять TTY (ускоряет non‑interactive команды).-A— проброс ssh‑агента (agent forwarding).-o KEY=VAL— задать любую опцию (UserKnownHostsFile,StrictHostKeyChecking=no,ServerAliveInterval=60, и т.д.).-C— сжатие трафика.-4/-6— использовать IPv4 / IPv6.-q— тихий режим, меньше чата.-v/-vv/-vvv— подробный отладочный вывод.-F FILE— альтернативный ssh‑конфиг.-K— GSSAPI аутентификация (Kerberos, если настроено).-g— разрешить внешние подключения к локально форвардному порту (-L,-D).
🚀 Айсберг команд ssh — от базового к гуру#
🟢 Уровень 1 — База (разогрев)#
ssh user@host
- Подключиться по умолчанию (порт 22)
ssh -p 2222 user@host
- Подключиться на нестандартный порт
ssh -i ~/.ssh/id_ed25519 user@host
- Использовать конкретный приватный ключ
ssh user@host 'uptime && df -h'
- Выполнить удалённую команду и выйти
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host
- Скопировать публичный ключ на сервер (включить вход по ключу)
🟡 Уровень 2 — Удобство и живучесть сессий#
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 user@host
- Поддерживать соединение и корректно падать при обрывах
ssh -o StrictHostKeyChecking=accept-new user@host
- Автоматически принимать новые host keys (безопаснее, чем
no)
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host
- Игнорировать known_hosts (только для test-окружений!)
ssh -t user@host 'sudo -i'
- Насильно выделить TTY для
sudo/интерактива
ssh -T git@github.com
- Без TTY: удобно для автоматизации/CI
🟠 Уровень 3 — Тонкие настройки через -o и конфиги#
ssh -o ConnectTimeout=5 -o Compression=yes user@host
- Таймаут коннекта и сжатие
ssh -o IdentityAgent=~/.ssh/agent.sock user@host
- Указать путь к ssh‑агенту
ssh -o PreferredAuthentications=publickey -o PubkeyAuthentication=yes user@host
- Явно использовать вход по ключу
ssh -F ./ssh_config user@host
- Использовать альтернативный конфиг
# ~/.ssh/config (пример хостов)
Host bastionHostName bastion.example.comUser opsHost appHostName app.internalUser deployProxyJump bastionIdentityFile ~/.ssh/id_ed25519
🔵 Уровень 4 — Туннели и прокси#
ssh -L 127.0.0.1:5432:db.internal:5432 user@bastion
- Локальный форвард PostgreSQL через бастион
ssh -R 8080:localhost:3000 user@host
- Удалённый форвард: сервис на локальном 3000 доступен на сервере по 8080
ssh -D 1080 user@host
- SOCKS5‑прокси на 1080; в браузере укажи SOCKS
127.0.0.1:1080
ssh -N -f -L 8443:127.0.0.1:443 user@host
- Фоновый локальный туннель (без команд)
ssh -g -L 0.0.0.0:8022:127.0.0.1:22 user@host
- Открыть локальный порт для внешних клиентов (осторожно!)
🟣 Уровень 5 — Бастионы и цепочки#
ssh -J bastion user@app.internal
- Подключиться к app через бастион (ProxyJump)
ssh -J bastion1,bastion2 user@deep.internal
- Многоступенчатый прыжок
ssh -o ProxyCommand='nc -X 5 -x 127.0.0.1:1080 %h %p' user@host
- ProxyCommand через SOCKS5 (альтернатива
-J)
ssh -A -J bastion git@github.com
- Агент‑форвардинг через бастион (для
git cloneс закрытого сегмента)
ssh -W target:22 bastion
- Использовать сервер как простую TCP‑прокладку (ssh
-W)
🔴 Уровень 6 — Мультиплексирование и скорость#
ssh -o ControlMaster=auto -o ControlPath=~/.ssh/cm-%r@%h:%p -o ControlPersist=10m user@host
- Переиспользовать одно TCP‑соединение для многих сессий (молниеносные повторы)
ssh -S ~/.ssh/cm-user@host:22 -O check user@host
- Управлять существующим мастером (check/exit/stop)
rsync -az -e "ssh -o ControlPath=~/.ssh/cm-%r@%h:%p" ./dir user@host:/srv/dir
- Быстрый
rsyncповерх открытого multiplex‑канала
GIT_SSH_COMMAND='ssh -o ControlPath=~/.ssh/cm-%r@%h:%p' git fetch --all
- Ускорить Git поверх уже установленного канала
🟤 Уровень 7 — Безопасность и продвинутое#
ssh-keygen -t ed25519 -C "you@host"
- Сгенерировать современную пару ключей
ssh-keygen -A
- Сгенерировать host keys на сервере (если отсутствуют)
ssh-keygen -R host && ssh-keyscan -H host >> ~/.ssh/known_hosts
- Обновить устаревший host key
ssh -Q key / ssh -Q cipher / ssh -Q kex
- Показать поддерживаемые ключи/шифры/алгоритмы обмена ключами
ssh -o KexAlgorithms=... -o Ciphers=... user@host
- Зафиксировать алгоритмы (совместимость/безопасность)
ssh -o PermitLocalCommand=yes -o LocalCommand='echo connected: %n' user@host
- Выполнить локальную команду после соединения
🧩 Бонус — scp/sftp/rsync поверх SSH#
scp -P 2222 file.txt user@host:/tmp/
- Быстрая передача файла (порт 2222)
scp -r ./dir user@host:/data/
- Рекурсивная загрузка директории
sftp -P 2222 user@host
- Интерактивный SFTP‑клиент
rsync -avz -e "ssh -p 2222" ./local/ user@host:/remote/
- Эффективная синхронизация поверх SSH (повторные передачи — инкрементальные)
ssh user@host 'tar -czf - /var/www' | tar -xzf - -C ./backup
- Копирование большого дерева без временных файлов (стрим через SSH)