[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-rabota-v-cli-bash-kak-rabotat-s-ssh":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":20,"progress":21,"seo":22},168,"kak-rabotat-s-ssh",4,"rabota-v-cli-bash","Работа в CLI (Bash)","💻","Как работать с SSH?","**SSH (Secure Shell)** — протокол для безопасного удалённого подключения к серверам, выполнения команд и передачи данных через зашифрованный канал. Для Java-разработчика SSH — основной способ взаимодействия с серверами, CI\u002FCD-инфраструктурой и Git-репозиториями.\n\n### Подключение\n\n```bash\nssh user@hostname                 # Подключение к серверу\nssh user@192.168.1.100            # По IP-адресу\nssh -p 2222 user@hostname         # Указание нестандартного порта\nssh user@hostname 'ls -la \u002Fopt'   # Выполнить команду удалённо и выйти\n```\n\n### Генерация SSH-ключей\n\nSSH-аутентификация по ключам безопаснее парольной и не требует ввода пароля при каждом подключении.\n\n```bash\n# Генерация пары ключей (рекомендуется Ed25519)\nssh-keygen -t ed25519 -C \"developer@example.com\"\n\n# Или RSA (4096 бит) — для совместимости со старыми системами\nssh-keygen -t rsa -b 4096 -C \"developer@example.com\"\n\n# Результат:\n# ~\u002F.ssh\u002Fid_ed25519       — приватный ключ (НИКОГДА не передавать!)\n# ~\u002F.ssh\u002Fid_ed25519.pub   — публичный ключ (можно передавать)\n```\n\n### Копирование ключа на сервер\n\n```bash\n# Автоматическое копирование (рекомендуется)\nssh-copy-id user@hostname\nssh-copy-id -i ~\u002F.ssh\u002Fid_ed25519.pub user@hostname\n\n# Ручное копирование (если ssh-copy-id недоступен)\ncat ~\u002F.ssh\u002Fid_ed25519.pub | ssh user@hostname \\\n    'mkdir -p ~\u002F.ssh && chmod 700 ~\u002F.ssh && cat >> ~\u002F.ssh\u002Fauthorized_keys'\n```\n\n### ssh-agent — менеджер ключей\n\n`ssh-agent` хранит расшифрованные приватные ключи в памяти, чтобы не вводить passphrase при каждом использовании:\n\n```bash\neval $(ssh-agent)                  # Запуск агента\nssh-add ~\u002F.ssh\u002Fid_ed25519          # Добавить ключ\nssh-add -l                         # Список ключей в агенте\n```\n\n### Конфигурация ~\u002F.ssh\u002Fconfig\n\nФайл конфигурации позволяет задать алиасы для серверов, избавляя от запоминания IP-адресов и параметров:\n\n```bash\nHost production\n    HostName 10.0.1.50\n    User deploy\n    Port 2222\n    IdentityFile ~\u002F.ssh\u002Fprod_key\n\nHost staging\n    HostName 10.0.2.30\n    User deploy\n    IdentityFile ~\u002F.ssh\u002Fstaging_key\n\nHost github.com\n    IdentityFile ~\u002F.ssh\u002Fgithub_key\n\nHost *\n    ServerAliveInterval 60\n    ServerAliveCountMax 3\n    AddKeysToAgent yes\n\n# Теперь можно подключаться:\n# ssh production       вместо   ssh -p 2222 deploy@10.0.1.50\n# ssh staging          вместо   ssh deploy@10.0.2.30\n```\n\n### SSH-туннелирование (проброс портов)\n\nТуннели позволяют безопасно получать доступ к сервисам, недоступным напрямую:\n\n```bash\n# Локальный проброс: доступ к удалённому сервису через локальный порт\nssh -L 5432:localhost:5432 user@server\n# Теперь localhost:5432 → PostgreSQL на сервере\n\n# Удалённый проброс: дать серверу доступ к локальному сервису\nssh -R 8080:localhost:8080 user@server\n\n# Динамический проброс (SOCKS-прокси)\nssh -D 1080 user@server\n# Весь трафик через прокси localhost:1080 идёт через сервер\n```\n\n### Права доступа к SSH-файлам\n\nSSH откажется работать, если права на файлы ключей слишком открыты:\n\n```bash\nchmod 700 ~\u002F.ssh\nchmod 600 ~\u002F.ssh\u002Fid_ed25519          # Приватный ключ — только владелец\nchmod 644 ~\u002F.ssh\u002Fid_ed25519.pub      # Публичный ключ — можно читать всем\nchmod 600 ~\u002F.ssh\u002Fauthorized_keys\nchmod 644 ~\u002F.ssh\u002Fconfig\n```\n\n> **На собеседовании:** покажите, что понимаете принцип асимметричной криптографии (приватный ключ остаётся у вас, публичный копируется на сервер). Знание `~\u002F.ssh\u002Fconfig` и SSH-туннелей отличает уверенного Middle от Junior. Частый вопрос: «как пробросить базу данных с production через bastion-хост?» — `ssh -J bastion -L 5432:db-host:5432 user@bastion`.\n\n---","","junior",[15,16,17,18,19],"security","linux","ssh","bash","networking",[],null,{"title":23,"description":24,"ogTitle":23,"ogDescription":25,"keywords":26,"schemaAnswer":35,"featuredSnippetReady":36},"SSH: подключение, ключи, туннели и конфигурация -- Gymterview","Как работать с SSH? Подключение к серверу, генерация ключей Ed25519\u002FRSA, ssh-agent, конфигурация ~\u002F.ssh\u002Fconfig, SSH-туннелирование и проброс портов.","Полное руководство по SSH: генерация ключей, конфигурация, ssh-agent, туннелирование и проброс портов для Java-разработчиков.",[27,28,29,30,31,32,33,34],"SSH","ssh-keygen","ssh-agent","SSH-туннель","проброс портов","ssh config","Ed25519","RSA ключи","SSH (Secure Shell) -- протокол безопасного удалённого подключения. Подключение: ssh user@hostname, с нестандартным портом -- ssh -p 2222. Генерация ключей: ssh-keygen -t ed25519 (рекомендуется) или ssh-keygen -t rsa -b 4096. Копирование ключа на сервер: ssh-copy-id user@hostname. ssh-agent хранит ключи в памяти, избавляя от ввода passphrase. Файл ~\u002F.ssh\u002Fconfig позволяет задать алиасы серверов. SSH-туннелирование: локальный проброс (-L), удалённый (-R) и динамический SOCKS-прокси (-D). Критически важны права: 700 на ~\u002F.ssh, 600 на приватный ключ.",true]