Tramp: ожидание подсказок от удаленной оболочки

У меня проблема с tramp против определенного хоста, когда я использую ssh-ключи для аутентификации. Он отлично работает, когда я не использую аутентификацию по ssh-ключу, но я бы хотел, чтобы пароль не вводился постоянно.

Не знаю, связано ли это, но я использую zsh для оболочки.

Я следовал обоим советам установки tramp-chunksize в 500 и добавления следующего кода в.zshrc:

if [[ "$TERM" == "dumb" ]]
then
  unsetopt zle
  unsetopt prompt_cr
  unsetopt prompt_subst
  unfunction precmd
  unfunction preexec
  PS1='$ '
fi

Но это не работает, и все еще висит с сообщением Tramp: Ожидание подсказок от удаленной оболочки

Любые идеи о том, как предотвратить эту раздражающую проблему? Благодарю.

3 ответа

Решение

Для меня Tramp 2.1.19-pre с аутентификацией zsh и SSH kye работает с использованием

(setq tramp-shell-prompt-pattern "^[^$>\n]*[#$%>] *\\(\[[0-9;]*[a-zA-Z] *\\)*")

в моем ~/.emacs

На вопрос был дан ответ, но для людей, которые наткнулись на это, не забудьте проверить, может ли ваша оболочка запрашивать какой-либо пользовательский ввод, прежде чем представлять оболочку. Например, oh-my-zsh проверяет наличие обновлений и запрашивает подтверждение перед их установкой при запуске оболочки. Это заставит tramp бесконечно ждать приглашения, поэтому убедитесь, что вход в систему проходит гладко, когда вы ssh, прежде чем спуститься в кроличью нору tramp.

Я не понимаю, как ваша удаленная оболочка может быть проблемой, если tramp работает с аутентификацией по паролю, но не с аутентификацией по ключу.

Возможное объяснение состоит в том, что ssh не видит ваш агент ssh, когда вы запускаете его из Emacs. Можете ли вы войти на удаленный компьютер, используя свой ключ с ssh из M-x shell или же M-x term буфер? Если ваш ключ имеет парольную фразу, ssh нужно как-то получить расшифрованный ключ. Он может подсказать вам напрямую (но я не уверен, что tramp пропустит подсказку ключа), или он может запустить внешнюю программу для запроса ключа (для этого требуется переменная окружения SSH_ASKPASS быть установленным), или он может получить ключ от вашего агента ssh (для этого требуется переменная окружения SSH_AUTH_SOCK установить). Ваша проблема может быть в том, что вы не настраиваете SSH_ASKPASS или же SSH_AUTH_SOCK в правильном месте, так что это не определено в вашей сессии Emacs.

Другие вопросы по тегам