我正在尝试登录 Ubuntu 桌面。我收到以下错误消息:
PTY 分配请求失败
这是什么意思以及如何连接到我的桌面?
这是输出-v
:
debug1: Reading configuration data /home/evag/.ssh/config
debug1: /home/evag/.ssh/config line 1: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: auto-mux: Trying existing master
debug1: mux_client_request_session: master session id: 2
PTY allocation request failed
鉴于上面使用详细选项显示的输出,我想我明白问题的根源:我有两台计算机,A 和 B。我在 A 中使用 controlmaster 来保持与 B 的持久连接。A 以安全的方式登录到 B,以command=/bin/false
限制 A 对 B 的使用(它只有转发功能)。
然而,我想在不使用此身份(-i)的情况下从 A 到 B 进行 ssh 连接,但问题是由于存在持久连接,所以无论我在 -i 中输入什么选项,它都会使用现有连接,所以我最终无法分配 PTY。
因此,假设存在从 A 到 B 的现有控制主控和受保护的连接,我如何才能获得从 A 到 B 的另一个连接,但这次具有完全权限?
答案1
我假设您已在 ~/.ssh/config 中指定了 ControlPath 和 ControlMaster?在这种情况下,ssh 在尝试访问该服务器时将始终检查 ControlPath。据我了解,如果 ControlPath 存在,即使设置了 ControlMaster=no,这也是默认设置(因为如果 ControlPath 存在,它会自动设置为“no”,以免尝试创建新的 ControlMaster)。
您将需要指定一个新的 ControlPath:
ssh -o ControlPath=~/.ssh/%r@%h:%p-newsession server
但是:我做了同样的事情,但不需要告诉它运行“false”,我只需使用 SSH 中的可用选项。请参阅手册页以了解创建转发连接而不启动 shell 的方法。如果操作正确,PTY 只会根据需要分配,甚至通过相同的控制连接。
-f Requests ssh to go to background just before command execution.
-N Do not execute a remote command. This is useful for just forwarding ports.
-T Disable pseudo-tty allocation.
因此就我而言(以及其他不相关的选项):
ssh -fNT server
其中 ~/.ssh/config 已经指定了 ControlPath。