Мне удалось решить эту проблему, передав путь к файлу терминального устройства через http. Вы можете получить этот путь с помощью:tty
$ curl http://my.app/cli?argv=do&argv=something&tty=$(tty)
Тогда нужно просто открыть переданный tty-файл на сервере и прочитать/записать в него вместо STDIN/STDOUT.
В комментариях я попросил вас запустить ssh-add -l
и ls $HOME/.ssh/id_*
, и оказалось, что у вас настроены SSH-ключи. Вы сказали, что у вас есть несколько ключей для разных проектов и доступов :, это может быть важной деталью.
Вероятно, сохраненные учетные данные SFTP на самом деле являются одним из ключей SSH, а не паролем.
Кроме того, администратор удаленного сервера может установить строгое ограничение на количество попыток аутентификации на одну попытку подключения, а у вас настроено так много ключей, что SSH пропустит все эти попытки, опробовав различные ключи SSH, прежде чем перейти к запрос пароля, в результате чего удаленный sshd
прекращает попытку подключения, не запрашивая пароль.
(Да, каждое предложение ключа считается одной попыткой аутентификации!)
В комментариях вы сказали, что уже решили эту проблему, переименовав каталог .ssh
. В качестве более удобной для пользователя -альтернативы вы можете записать такой фрагмент в свой ~/.ssh/config
файл:
Host problem.server.hostname
IdentitiesOnly yes
# uncomment the line below to offer only a specified key and no other
# IdentityFile ~/.ssh/id_key_file_name_here
# uncomment the line below to only use password authentication with this host
# PubkeyAuthentication no
Это ограничит ключи и/или методы аутентификации, используемые с конкретным хостом, избегая проблемы «слишком много ключей».