Гид по технологиям

Как копировать файлы по SSH без ввода пароля

6 min read Администрирование Обновлено 25 Dec 2025
Копирование файлов по SSH без пароля
Копирование файлов по SSH без пароля

Кратко

Быстрые ссылки

  • Копирование файлов по SSH
  • SSH и SCP без паролей
  • Настройка ssh-agent и автоматизация
  • Соображения по безопасности

Инфографика: копирование файлов по SSH без пароля

Введение

SSH — это не только интерактивный доступ к удалённой машине, но и надёжный способ передавать файлы. Команда scp (secure copy) и сопутствующие возможности SSH позволяют автоматизировать резервное копирование, деплой и синхронизацию без ввода пароля, если использовать ключи. В статье описаны способы настройки, тонкие места безопасности и практические сценарии для Linux, macOS и Windows.

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

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

Основной формат:

scp [опции] исходный_файл назначение

Удалённая часть указывается как:

пользователь@сервер:путь/к/файлу

Сервер может быть адресом (IP) или доменным именем. После двоеточия идёт путь на удалённой машине.

Примеры (правильные синтаксисы):

scp -P 40050 Desktop/url.txt yatri@192.168.1.50:~/Desktop/url.txt

Пояснения:

  • Опция -P указывает порт SSH (по умолчанию 22).
  • ~/ соответствует домашней директории пользователя на удалённой машине.

Чтобы скопировать файл с удалённого сервера на локальную машину:

scp -P 40050 yatri@192.168.1.50:~/Desktop/url.txt ~/Desktop/

Для копирования директорий используйте рекурсивную опцию -r:

scp -r -P 40050 yatri@192.168.1.50:~/project ~/local_project

Можно комбинировать опции компактно, например:

scp -Pr -P 40050 yatri@192.168.1.50:~/project ~/local_project

Важно: автодополнение путей в удалённом контексте не всегда работает — держите открытую SSH-сессию или документируйте пути.

Пример: отправка файла на удалённый сервер с помощью scp

Пример: получение файла с удалённого сервера с помощью scp

Рекурсивное копирование каталога с помощью scp

SSH и SCP без паролей — принцип и подготовка

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

Генерация ключей на локальной машине:

ssh-keygen -t rsa -b 2048

При запуске ssh-keygen вас спросят, куда сохранить ключ (по умолчанию ~/.ssh/id_rsa и ~/.ssh/id_rsa.pub) и предложат ввести passphrase (пасфразу). Рекомендуется установить надёжную пасфразу и затем использовать ssh-agent, чтобы не вводить её постоянно.

Вывод ssh-keygen при создании ключей

Передача публичного ключа на сервер:

Самый простой инструмент — ssh-copy-id (если он доступен):

ssh-copy-id -i ~/.ssh/id_rsa.pub -p 40050 yatri@192.168.1.50

Альтернативно можно скопировать вручную:

scp -P 40050 ~/.ssh/id_rsa.pub yatri@192.168.1.50:~/
# затем на сервере
mkdir -p ~/.ssh
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
rm ~/id_rsa.pub

Некоторые старые инструкции используют файл authorized_keys2; современная практика — authorized_keys.

Передача публичного ключа на сервер

Настройка ssh-agent и удобство использования

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

Запуск и добавление ключа:

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

После ввода пасфразы один раз ключ доступен в текущей сессии. На macOS и современных дистрибутивах Linux можно интегрировать ssh-agent с системным ключхранилищем.

Для Windows:

  • OpenSSH в Windows 10+ поддерживает ssh и ssh-agent.
  • В PuTTY используйте puttygen для генерации ключей и Pageant как агент.
  • Cygwin/WSL предоставляет привычные инструменты ssh/ssh-agent.

SSH-сессия с агентом ключей

Безопасность: настройки серверной стороны

Ключи делают соединение одновременно удобнее и безопаснее, если вы соблюдаете простые правила.

Рекомендуемые действия на сервере:

  • Убедитесь, что права для ~/.ssh и authorized_keys строгие: 700 для ~/.ssh, 600 для authorized_keys.
  • Запретите аутентификацию по паролю, как только проверите, что ключи работают: в /etc/ssh/sshd_config установите PasswordAuthentication no.
  • Используйте параметр PermitRootLogin no, чтобы запрещать прямой root-доступ по SSH.
  • Ограничьте доступ по пользователям (AllowUsers user1 user2) или группам.
  • Рассмотрите использование Fail2Ban для защиты от брутфорс-атак.
  • Обновляйте SSH-сервер и поддерживайте современные алгоритмы шифрования.

Важно: перед отключением паролей убедитесь, что у вас есть рабочая сессия с действующим ключом; иначе вы рискуете потерять доступ.

Угрозы и меры смягчения

  • Если кто-то получит ваш приватный ключ, он сможет подключиться к любому серверу, где размещён соответствующий публичный ключ. Храните приватные ключи защищённо и используйте уникальные ключи для разных машин.
  • Защитите директорию ~/.ssh (системные бэкапы тоже могут копировать эти файлы — подумайте об исключениях).
  • Используйте пасфразы и ssh-agent, вместо хранения приватного ключа без защиты.
  • Для особо важных систем используйте аппаратные токены (например, YubiKey) или сертификаты OpenSSH.

Комбинация ключей и пасфраз

Вы можете сочетать приватный ключ и пасфразу: при генерации ключа задайте пасфразу. Тогда для автоматизации используйте ssh-agent:

  • Вручную: запуск ssh-agent и ssh-add при старте сессии.
  • В системах CI/CD: загружайте приватный ключ в защищённый секрет-менеджер и временно добавляйте его перед шагом деплоя, затем удаляйте.

Если вы храните ключи в облачных CI, убедитесь, что эти хранилища сертифицированы и доступы ограничены.

Когда ключи не подходят и альтернативы

  • Когда нельзя хранить приватный ключ на машине (политика предприятия) — используйте сертификаты OpenSSH или аппаратные ключи.
  • Для одноразовых передач можно использовать SFTP с временной учётной записью.
  • В окружениях с централизованной аутентификацией лучшим будет использование Kerberos/LDAP с поддержкой SSH.

Практическая методология внедрения (шаги)

  1. Сгенерировать пару ключей: ssh-keygen -t rsa -b 2048.
  2. Проверить работу ключа: ssh -i ~/.ssh/id_rsa -p 22 user@server.
  3. Перенести публичный ключ на сервер (ssh-copy-id или вручную).
  4. Установить права безопасности для ~/.ssh и authorized_keys.
  5. Настроить ssh-agent и добавить ключ.
  6. Протестировать scp/ssh без пароля. Оставить одну активную сессию при изменении настроек сервера.
  7. После успешного теста по желанию отключить PasswordAuthentication на сервере.

Критерии приёмки

  • scp и ssh работают без запроса пароля из вашей рабочей сессии.
  • Права на сервере: ~/.ssh 700, authorized_keys 600.
  • Приватный ключ защищён пасфразой или безопасным хранениям (ssh-agent, аппаратный токен).
  • При отключённой аутентификации по паролю доступ к серверу сохраняется с помощью ключа.

Роль‑ориентированные контрольные списки

Для пользователя:

  • Сгенерировать ключи и сохранить приватный ключ в ~/.ssh.
  • Установить пасфразу и ознакомиться с ssh-agent.
  • Проверить доступ к целевым серверам.

Для системного администратора:

  • Проверить/настроить права в домах пользователей.
  • Ограничить доступ в sshd_config и включить логирование.
  • Настроить Fail2Ban и мониторинг неудачных попыток.

Для DevOps-инженера:

  • Интегрировать ключи в CI с помощью защищённых переменных.
  • Обеспечить ротацию ключей и процедуру отзывов (revocation).
  • Документировать и автоматизировать развертывание ключей.

Примеры сценариев и шаблоны команд

  • Копирование каталога:
scp -r -P 22 ~/local_dir user@server:/var/www/project
  • Автоматический бэкап из скрипта (с использованием ssh-agent):
# В начале сессии
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
# Затем в crontab или скрипте
scp -r /var/backups user@backup.example.com:/backups/$(hostname)/
  • Использование альтернативы ssh-copy-id:
cat ~/.ssh/id_rsa.pub | ssh user@server 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys'

Модель принятия решений (Mermaid)

flowchart TD
  A[Нужно ли автоматическое копирование файлов?] -->|Да| B{Есть ли доступ к серверу сейчас}
  B -->|Да| C[Использовать ssh-keygen и ssh-copy-id]
  B -->|Нет| D[Получить доступ/учётные данные]
  C --> E{Требуется хранить ключ без пасфразы?}
  E -->|Да| F[Не рекомендуется: использовать ssh-agent или CI секреты]
  E -->|Нет| G[Добавить пасфразу и настроить ssh-agent]
  F --> H[Ограничить ключи по IP и правам]
  G --> I[Тестирование и деплой]

Соображения по GDPR и приватности

  • Приватные ключи считаются конфиденциальной информацией; при обработке таких данных в облачных сервисах убедитесь в соответствии политике хранения секретов.
  • Логи серверов не должны содержать содержимого приватного ключа. Контролируйте доступ к ~/.ssh и журналам.

Лучшие практики и сценарии, когда это не сработает

  • Если сервер использует двухфакторную аутентификацию, простая замена пароля на ключ может быть недостаточной.
  • В средах с жёсткой политикой безопасности могут запрещать хранение приватных ключей на обычных рабочих станциях — используйте аппаратные ключи или сертификаты.
  • Для одновременного использования ключей на множестве сервисов рекомендуется иметь отдельные ключи для каждой цели.

Ключевые факты

  • По умолчанию ssh-keygen генерирует RSA с длиной 2048 бит (можно увеличить до 4096 бит).
  • Стандартный порт SSH — 22; опция -P в scp указывает другой порт.
  • Приватные ключи по умолчанию находятся в ~/.ssh/id_rsa, публичные — в ~/.ssh/id_rsa.pub.

Заключение

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

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


Были ли у вас случаи, когда scp в скриптах спасал ситуацию? Используете ли вы аппаратные ключи или ssh-agent? Поделитесь опытом в комментариях.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как выйти из Discord на ПК и мобильном
Руководства

Как выйти из Discord на ПК и мобильном

Как скрывать спойлеры в Telegram — Desktop и Mobile
Мессенджеры

Как скрывать спойлеры в Telegram — Desktop и Mobile

Найти музыку для Reels в Instagram
Instagram

Найти музыку для Reels в Instagram

Установка .deb на Ubuntu 16.04 без GNOME Software
Ubuntu

Установка .deb на Ubuntu 16.04 без GNOME Software

Кастомные эмодзи в Discord — добавление и управление
Инструкции

Кастомные эмодзи в Discord — добавление и управление

Todoist для фитнеса: план, трекинг и привычки
Фитнес

Todoist для фитнеса: план, трекинг и привычки