当我使用 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 代理。您能使用密钥从ssh
或M-x shell
缓冲区登录到远程计算机M-x term
吗?如果您的密钥有密码,则ssh
需要以某种方式获取解密的密钥。它可以直接提示您(但我不确定 tramp 是否会让密钥提示通过),或者它可以启动外部程序来提示您输入密钥(这需要SSH_ASKPASS
设置环境变量),或者它可以从您的 ssh 代理获取密钥(这需要SSH_AUTH_SOCK
设置环境变量)。您的问题可能是您没有设置SSH_ASKPASS
或SSH_AUTH_SOCK
在正确的位置,因此它没有在您的 Emacs 会话中定义。
答案3
这个问题已经得到解答,但对于偶然发现这个问题的人来说,请记住在显示 shell 之前检查 shell 是否会要求用户输入任何内容。例如哦我的天啊在 shell 启动时检查更新并要求确认,然后再安装。这将导致 tramp 无休止地等待提示,因此在进入 tramp 兔子洞之前,请确保 ssh 时登录顺利。