Tramp:等待远程 shell 的提示

Tramp:等待远程 shell 的提示

当我使用 ssh-keys 进行身份验证时,tramp 针对特定主机出现问题。当我不使用 ssh-key 身份验证时,它可以正常工作,但我想避免一直输入密码。

不知道是否相关,但我使用 zsh 作为 shell。

我遵循了将 tramp-chunksize 设置为 500 并将以下代码添加到 .zshrc 的提示:

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

但它不起作用,仍然挂着消息 Tramp:等待来自远程 shell 的提示

有什么办法可以避免这个烦人的问题吗?谢谢。

答案1

对于我来说,Tramp 2.1.19-pre 和 zsh 以及 SSH kye 身份验证可以使用

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

在我的 ~/.emacs 中

答案2

如果 tramp 使用密码验证但使用密钥验证则不行,我不明白你的远程 shell 怎么会成为问题。

一种可能的解释是,ssh当您从 Emacs 内部运行它时,它看不到您的 ssh 代理。您能使用密钥从sshM-x shell缓冲区登录到远程计算机M-x term吗?如果您的密钥有密码,则ssh需要以某种方式获取解密的密钥。它可以直接提示您(但我不确定 tramp 是否会让密钥提示通过),或者它可以启动外部程序来提示您输入密钥(这需要SSH_ASKPASS设置环境变量),或者它可以从您的 ssh 代理获取密钥(这需要SSH_AUTH_SOCK设置环境变量)。您的问题可能是您没有设置SSH_ASKPASSSSH_AUTH_SOCK在正确的位置,因此它没有在您的 Emacs 会话中定义。

答案3

这个问题已经得到解答,但对于偶然发现这个问题的人来说,请记住在显示 shell 之前检查 shell 是否会要求用户输入任何内容。例如哦我的天啊在 shell 启动时检查更新并要求确认,然后再安装。这将导致 tramp 无休止地等待提示,因此在进入 tramp 兔子洞之前,请确保 ssh 时登录顺利。

相关内容