ssh:为什么我为特定主机禁用的转发 X11 不起作用?

ssh:为什么我为特定主机禁用的转发 X11 不起作用?

我使用 ssh 的别名

alias ssh
alias ssh='ssh -t -K -Y

我想使用 ssh 转发 X11(除了一台主机),所以我这样做了:

vim .ssh/config

host myhost
   port 22
   ForwardX11 no
   HostkeyAlgorithms +ssh-rsa
   PubkeyAcceptedAlgorithms +ssh-rsa

但..

ssh myhost 
sh: xauth: command not found
myuser@myhost$ 

似乎我的选项被忽略了..为什么?

我也尝试过

   ForwardX11 no
   ForwardX11trusted no

但没有成功。

解决方法可以是这样...

\ssh myhost

所以 -t -K -y 被忽略,但我更喜欢更干净的解决方案

我忘了:远程服务器使用 dropbear

阅读这一页我发现可以为服务器上的特定密钥禁用 X11

vim .ssh/authorized_keys

no-X11-forwarding ssh-rsa......

但在这种情况下它也拒绝 \ssh 命令!

ssh myhost
X11 forwarding request failed on channel 0
Connection to myhost closed by remote host.
Connection to myhost closed.

\ssh myhost 
Connection to myhost closed by remote host.
Connection to myhost closed.

在服务器上使用此行可以工作..但对于 pubkey 来说不行,它需要密码

no-agent -forwarding, no-port-forwarding, no-x11-forwarding ssh-rsa....

答案1

初步说明

您标记了但我怀疑你的 SSH客户来自 Dropbear (即我怀疑你ssh实际上是dbclient;我想dbclient甚至不支持你使用的所有选项)。因此,这个答案研究了 OpenSSH 的 SSH 客户端的行为。

(我个人希望任何客户端在与问题相关的方面复制 OpenSSH 的行为。关键是 OpenSSH 是 SSH 实现的事实上的标准。)


分析

man 5 ssh_config

ssh(1)按以下顺序从以下来源获取配置数据:

  1. 命令行选项
  2. 用户的配置文件 ( ~/.ssh/config)
  3. 系统范围的配置文件 ( /etc/ssh/ssh_config)

对于每个参数,将使用第一个获得的值。 […]

通过使用别名,您正在使用ssh -Y.命令行选项会在您的配置文件中ssh忽略。ForwardX11 no如果您希望配置文件中的选项起作用,则不得使用任何相反的命令行选项。命令行选项首先重要,就是这样。


解决方案

你写了:

我想使用 ssh 转发 X11 除了一台主机

不要在别名中,而是在配置文件中实现它:

host myhost
   ForwardX11 no

host *
   ForwardX11 yes
   ForwardX11Trusted yes

请注意手册中的说明:

由于使用每个参数的第一个获得的值,因此应在文件开头附近给出更多特定于主机的声明,并在末尾给出一般默认值。

这意味着host myhost应该在之前host *,与上面的示例完全相同,而不是相反。

相关内容