Вопрос или проблема
Изменения в стандартном поведении scp
с версии openSSH 8 до версии 9 требуют использования scp
с опцией -O
для переопределения использования протокола SFTP по умолчанию. Как можно настроить scp
для использования старого протокола по умолчанию?
Это должно быть возможно сделать в файле ~/.ssh/config
пользователя, даже для конкретных хостов, но я не могу понять, как именно, или даже возможно ли это. Я был бы удовлетворен, если бы это было возможно сделать глобально где-то в /etc/ssh
, если невозможно в ~/.ssh/config
.
Однако я нашел альтернативу для опции ssh -O
, которая работает (см. superuser) ssh -o "PubkeyAcceptedAlgorithms=+ssh-rsa"
, но не смог выяснить, как добавить это в свой файл ~/.ssh/config
, о чем автор поста утверждал, что может сработать.
Опция -o
не возвращает использование протокола scp вместо нового протокола sftp по умолчанию, но решила проблему подключения, с которой я столкнулся. Как и с опцией -O
, я не думаю, что возможно использовать эту опцию в файле ~/.ssh/config
, поэтому подход с использованием обертки кажется наилучшим способом решения этой проблемы. Используется ли в обертке опция -O
или -o
зависит от вашей собственной оценки проблемы.
На 2025 год, в текущей версии OpenSSH 9.9, выпущенной в сентябре 2024 года, единственным способом переключиться на старый режим SCP является использование переключателя -O
.
Нет другого способа, ни с использованием config
, ни чего-нибудь другого.
Вы можете создать alias для scp
или обертку-скрипт.
См. scp -O (legacy protocol) option per config file? на Super User.
Ответ или решение
Вопрос относительно настройки поведения scp
в OpenSSH с версии 8 по 9 состоит в том, как можно изменить протокол передачи файлов по умолчанию с SFTP на более ранний протокол SCP без использования опции -O
. Это вопрос актуален в контексте новых изменений в OpenSSH, где SFTP стал протоколом по умолчанию.
Теория
SCP (Secure Copy Protocol) и SFTP (SSH File Transfer Protocol) используются для безопасной передачи файлов между хостами. В версии 9 OpenSSH по умолчанию использует SFTP, что связано с его большей безопасностью и дополнительными возможностями. Однако SCP иногда все еще предпочтителен в силу совместимости с более старыми системами или требованиями со стороны некоторых пользователей.
В параметрах команды scp
есть ключ -O
, который позволяет использовать старый протокол SCP вместо SFTP, однако, как указано в вашем вопросе, в конфигурационных файлах OpenSSH /etc/ssh/ssh_config
или ~/.ssh/config
не предусмотрена возможность установить этот ключ по умолчанию для определенных хостов. Новые версии OpenSSH постепенно исключают SCP в пользу SFTP из-за известной уязвимости SCP, которой нет у SFTP. SCP просто копирует файлы, тогда как SFTP предлагает возможности управления файлами и директориями.
Пример
Представим себе ситуацию. Вы работаете с системой, которая требует использования SCP, возможно, из-за устаревшего программного обеспечения или других ограничений. Ваша команда регулярно использует scp
для передачи конфиденциальных файлов между серверами. Переход на SFTP требует значительных изменений в настройке системы или даже замену оборудования, что проблематично.
Применение
На практике, для решения данной задачи, возможно следующее:
-
Создание алиаса или скрипта-оболочки: Вы можете создать алиас в вашей оболочке (например, Bash), чтобы всегда включать
-O
, когда вы вызываетеscp
. Например, добавьте следующее в ваш~/.bashrc
:alias scp='scp -O'
Это автоматически добавит
-O
ко всем вызовамscp
из вашей оболочки. -
Использование скрипта-оболочки: Создайте скрипт, который заменит
scp
. Например, в вашем~/bin/
:#!/bin/bash /usr/bin/scp -O "$@"
Убедитесь, что
~/bin/
находится в вашем$PATH
, и сделайте скрипт исполнимым:chmod +x ~/bin/scp
-
Модификации в
~/.ssh/config
: Хоть директная поддержка опции-O
в конфигурационных файлах не предусмотрена, можно использовать параметрProxyCommand
для управления специфическим поведением при подключении, но это может быть более компексным решением на основе каждого индивидуального случая. -
Глобальный конфигурационный файл: Изменения в
/etc/ssh/ssh_config
могут быть предложены, если доступ к этому файлу не ограничен. Однако, конкретный параметр для-O
также здесь не реализован.
Таким образом, создавая алиас или скрипт-оболочку, вы определяете более надежное решение, хотя оно и требует некоторой технической гибкости. Это также позволяет пользователю сохранить контроль над поведением scp
без изменения системных файлов или угрозы безопасности применения старого протокола.
Несмотря на ограничения, важно помнить, что поддержка старых протоколов из соображений безопасности и совместимости со временем исчезает. В долгосрочной перспективе может оказаться выгоднее и безопаснее адаптировать ваши процессы и окружения к SFTP, полностью используя его дополнительные функции по сравнению с SCP.