Я использую SSH-терминал Macbook и сгенерировал пары ключей RSA и загрузил удаленный id_rsa.pub
с одобренными разрешениями. Я могу подключиться к удаленному веб-серверу Apache. Я могу создавать, открывать, перемещать, изменять и при предварительной проверке управлять файлами на веб-сервере, без проблем … и не генерировать никаких сообщений об ошибках.
Удивительно, но я не могу scp
папку или документ с моего рабочего стола на удаленный сервер. Я также не могу scp
папку или документ с удаленного сервера на свой рабочий стол. Каждый раз, когда я получаю сообщение об ошибке:
stdin: не является tty
Команда scp
на или с удаленного веб-сервера не работает ни с абсолютными, ни с относительными ссылками на расположение файлов.
Мой стандартный синтаксис выглядит так:
От локального хоста:
scp -rp ~/Desktop/foldername username@secureremoteserver.com:~/public_html
От удаленного хоста:
scp -rp username@secureremoteserver.com:~/public_html/foldername ~/Desktop/
Это похоже на проблему с stdin: is not a tty
сообщение об ошибке stdin: is not a tty
.
Что происходит?
Если эта ошибка предотвращает передачу файлов, как мне решить stdin: is not a tty
?
Причина этого в том, что один из сценариев входа на целевом сервере использует stty...
для настройки характеристик терминала. Команда не работает, когда у нее нет tty, т.е. когда вы подключаетесь к scp
.
Решение состоит в том, чтобы защитить stty
чтобы он работал только при наличии интерактивного сеанса. Существует несколько способов сделать это; вот несколько примеров для оболочек bash / sh:
Гадкий:
stty ... >/dev/null 2>&1
Работает на меня:
test -n "$PS1" && stty ...
Рекомендовано в других странах :
# Check for a bash login shell case $- in *i*) stty ... ;; esac
Я не уверен, имеет ли значение для реализации OSX sshd, но в некоторых системах, когда у вас нет tty, подразумеваемый домашний каталог с ~ / конвенцией может не расширяться, и вы можете получить неожиданные результаты. Я знаю, что это не обязательно, но попробуйте указать полные имена путей, а не ~ / construct.
Это происходит со мной, когда мой .bash_profile пытается загрузить. я добавил
[-z "$ {PS1}"] && return;
Наверху и это исправлено