Я пытаюсь перенести файлы SCP с одного компьютера на другой, но получаю
запрос exec не выполнен на канале 0".
Однако, когда я использую SSH, я могу получить доступ к машине без проблем. Я использую функцию SCP в Cygwin, если это поможет.
При поиске в Интернете я обнаружил файл «.bashrc», однако единственный файл, который я нашел, — это «bash.bashrc».
Вот команда, которую я использовал:
scp /filelocation/file user@hostname:/folderlocation
Я также пробовал использовать IP-адрес вместо имени хоста, но результат тот же.
Я проверил, что на удаленном сайте есть команда SCP.
решение1
Это произошло со мной, когда я пытался отправить некоторые файлы на Synology NAS.
Бег scp -O
помог.
Опция -O
использует устаревший протокол SCP для передачи файлов вместо протокола SFTP.
решение2
Чтобы увидеть файл .bashrc (и другие файлы, начинающиеся с точки), вам нужно сделать
ls -a
Простой способ обойти эту проблему — переименовать файлы .profile, .bashrc, .login, .bash_profile, чтобы они не были включены. Они известны как файлы запуска оболочки.
Если ваш scp теперь работает, ответ кроется в одном из этих файлов.
По сути, один из файлов запуска оболочки отправляет выходные данные обратно, и это нарушает процесс согласования SSL.
Это может быть так же просто, как отправка специальных escape-последовательностей для установки заголовка окна. Другим виновником является команда stty.
Вы хотите выводить вывод на терминал только при входе в систему с помощью
if tty -s >/dev/null 2>&1; then
# here if have a real terminal associated to send stty commands
# or other special escape sequences to terminal
fi
решение3
я согласен симпульсная лампачто эта ошибка часто возникает из выходных данных файлов инициализации bash .bashrc (и других).
Однако есть несколько встроенных в bash способов проверки интерактивных оболочек:расширенное руководство по написанию bash-скриптовссылка,ошибка серверассылка.
Чаще всего я видел, как проверяют $PS1 на предмет того, когда следует выполнять вывод:
if [ "$PS1" ]; then
echo "some message"
fi
решение4
Поскольку не все клиенты (или клиентские учетные записи) поддерживают использование ssh для вмешательства в скрипты входа, допустимой альтернативой try/use будет sftp вместо scp.