首先,我想指出,我知道还有很多关于 SSH 代理转发的其他问题。那里的人想知道如何使代理转发工作或如何安全地配置它。但我有相反的问题:似乎我无法可靠地禁用它。所以我们开始:
我正在运行一个 Debian bullseye 系统,在撰写本文时是最新的,基本上是 vanilla。在该系统上,SSH 守护进程正在运行,其中配置如下/etc/ssh/sshd_config
:
AcceptEnv LANG LC_*
AllowAgentForwarding no
AllowTcpForwarding no
AllowStreamLocalForwarding no
ChallengeResponseAuthentication no
Ciphers [email protected],[email protected]
Compression no
DebianBanner no
HostKeyAlgorithms rsa-sha2-512,ssh-ed25519
KbdInteractiveAuthentication no
KexAlgorithms curve25519-sha256,[email protected],diffie-hellman-group-exchange-sha256
ListenAddress aaa.bbb.ccc.ddd
LoginGraceTime 20
MACs [email protected],[email protected]
PasswordAuthentication no
PermitUserRC no
Protocol 2
# The first of the following version is the right one.
# However, for brain-dead WinSCP, we need the second version.
#PubkeyAcceptedKeyTypes rsa-sha2-512,rsa-sha2-256,ssh-ed25519
PubkeyAcceptedKeyTypes rsa-sha2-512,rsa-sha2-256,ssh-ed25519,ssh-rsa
RekeyLimit 100M 20m
Subsystem sftp /usr/lib/openssh/sftp-server
Match user copyremote
ChrootDirectory /backup
ForceCommand /usr/lib/openssh/sftp-server
这是完整的配置文件;除了它侦听的 IP 地址外,没有任何内容被删除或混淆。此外,没有其他地方包含 SSH 守护进程的额外配置片段。
基本上,该配置试图关闭我不需要的所有功能,例如代理转发功能(注意:在该配置文件中,我没有为默认关闭的大多数功能添加行(根据手册))。我们还看到身份验证完全基于公钥。
前几天,我正在调查用户copyremote
和 sftp 子系统的问题,因此将-v
其作为参数提供给sftp
客户端计算机。这导致以下输出(仅显示相关部分):
root@morn ~/scripts # sftp -v -i ~/.ssh/id_rsa_backup_user [email protected]:/backup/achilles.bsdtar.gz .
OpenSSH_8.4p1 Debian-5+deb11u1, OpenSSL 1.1.1n 15 Mar 2022
[...]
debug1: Remote: /home/usr/copyremote/.ssh/authorized_keys:1: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding
debug1: Remote: /home/usr/copyremote/.ssh/authorized_keys:1: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding
[...]
现在这很可怕。我以为我在服务器上的系统范围配置文件中全局关闭了代理转发。但是,据我了解该输出,它提供了它。
谁能解释一下我如何在全球范围内关闭代理转发(以及我不希望服务器提供的其他功能) ?
这些功能可以在文件中明确禁用authorized_keys
,但如果有多个用户并且每个用户都接受多个公钥,那将非常容易出错并且需要大量工作,所以我真的更希望能够一次将其关闭地方。
这是服务器上authorized_keys
用户的文件:copyremote
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDs6ku+LXaUBs....JFchhaoQ== me@client
里面没有什么特别的。值得注意的是,代理转发是不允许明确的。为什么它不应用系统范围配置中的设置呢?
PS 我知道 SSH / SFTP chroot 不提供我们期望的安全性。我已经在服务器上实施了进一步的措施来缓解这个问题,所以这里不需要讨论 :-)
它只是说代理转发可以使用密钥(默认),如果全局启用代理转发(它不是)。
日志条目仅显示解析
authorized_keys
文件的结果。它基本上表示no-agent-forwarding
在相应条目中未找到该标志。它绝不反映AllowAgentForwarding no
指令。