主拒绝会话请求:权限被拒绝

Vla*_*eev 4 openssh

我正在尝试设置 SSH 多路复用,但我遇到了一个错误,并且在 Google 上有 0 次点击以获得确切的错误消息。

~/.ssh/config用内容创建:

Host *
 ControlPath ~/.ssh/master-%r@%h:%p
Run Code Online (Sandbox Code Playgroud)

然后,我通过运行创建了主连接:

ssh -vMM user@host.example.com
Run Code Online (Sandbox Code Playgroud)

这似乎成功创建了多路复用套接字:

...
Authenticated to host.example.com ([1.2.3.4]:22).
debug1: setting up multiplex master socket
debug1: channel 0: new [/home/user/.ssh/master-user@host.example.com:22]
debug1: channel 1: new [client-session]
debug1: Entering interactive session.
...
Run Code Online (Sandbox Code Playgroud)

然后,我尝试在另一个窗口中通过 ssh 运行命令:

ssh -v user@host.example.com ls
Run Code Online (Sandbox Code Playgroud)

但是,这似乎无法使用多路复用套接字:

OpenSSH_7.5p1, OpenSSL 1.1.0f  25 May 2017
debug1: Reading configuration data /home/user/.ssh/config
debug1: /home/user/.ssh/config line 1: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
Master refused session request: Permission denied
debug1: Connecting to host.example.com [1.2.3.4] port 22.
...
Run Code Online (Sandbox Code Playgroud)

什么可能导致Master refused session request: Permission denied错误发生?


编辑:的权限~/.ssh~/.ssh/config是700和644分别,所以我看不出问题在那里。~/.ssh/master-*不存在,我猜它是一个抽象的 UNIX 套接字(因此实际上并不存在于文件系统中)?但是,这仍然不能解释“拒绝访问”错误。

另外,我注意到在尝试建立第二个连接时,主连接打印:

debug1: channel 2: new [mux-control]
debug1: permanently_drop_suid: 0
ssh_askpass: exec(/usr/lib/ssh/ssh-askpass): No such file or directory
debug1: channel 2: free: mux-control, nchannels 3
Run Code Online (Sandbox Code Playgroud)

也许这是相关的。我使用未加密的 SSH 密钥进行连接,所以我不明白为什么 SSH 需要要求输入密码。

Vla*_*eev 5

我已经弄清楚是什么导致了“拒绝访问”错误。

默认情况下,当另一个 SSH 进程想要使用现有的 Multiplex 会话时 SSH 似乎想以交互方式请求许可。但是,ssh-askpass它用于请求许可的程序在我的系统中丢失,因此 SSH 默认为“不,不授予访问权限”,从而导致客户端上出现“拒绝访问”错误消息。

如果ssh-askpass已安装(在 Arch Linuxx11-ssh-askpass软件包中),则会显示如下对话框:

选择“确定”将允许连接尝试继续。

提示本身是因为我-M在 master 的命令行上指定了两次。引用SSH(1)

多个 -M 选项将 ssh 置于“主”模式,在接受从连接之前需要确认。

  • 它这样做是因为您使用了`-MM`。只使用一个 `-M` 不需要这个。 (2认同)