[本机是192.168.80.125]
允许所有基本访问的正常 SSH 规则:
AllowUsers user1
PubkeyAuthentication yes
PasswordAuthentication no
AllowTcpForwarding yes
UsePAM no
匹配组测试
AllowUsers user2@IP1 user2@IP2 user2@IP3 user2@IP4
PubkeyAuthentication yes
PasswordAuthentication yes
AllowTcpForwarding yes
PermitOpen 192.168.80.100:80
PermitOpen 192.168.80.125:443
AllowAgentForwarding no
当我以用户 2 的身份从 IP1 连接到 sshd 时,我可以连接,我使用 PuTTY 打开我的隧道:
本地 S:IP1:8080 远程 D:192.168.80.100:80
本地源:IP1:8443 远程目标:192.168.80.125:443
我打开浏览器并浏览到 localhost:8080,结果连接重置。我打开浏览器并浏览到 localhost:8443,结果连接重置。
我检查 SSH 日志:
192.168.80.125 authlog: Received request to connect to host 192.168.80.100 port 80, but the request was denied.
192.168.80.125 authlog: Received request to connect to host 192.168.80.125 port 443, but the request was denied.]
Event Log: Opening connection to 192.168.80.125:443 for forwarding from [::1]:3585
Outgoing packet : (SSH2_MSG_CHANNEL_OPEN)
Incoming packet : (SSH2_MSG_CHANNEL_OPEN_FAILURE)
Event Log: Forwarded connection refused by server: Administratively prohibited [open failed]
OpenSSH_7.5p1 Ubuntu-10ubuntu0.1, OpenSSL 1.0.2g 1 Mar 2016
当以 user1 和 pubkey/etc 身份使用 SSH 时,我可以成功访问 192.168.80.125:80 / 192.168.80.125:443 处的资源,并且 TCP Forward 可以正确地对任何东西起作用。
我首先设置了 PermitOpen,这样就可以了。然后我添加了 user2@ 限制,结果却出了问题。
有没有更好的方法可以做到这一点?我想确保用户 2 只能通过隧道连接到指定的资源,并且只能从指定的 IP 登录。
我还注意到,当我以用户 2 身份登录并切换到用户 1 时,转发规则仍然基于用户 2。
答案1
这真是令人尴尬。显然我的 PermitOpen 语法不正确。
我发现如果列出多行 PermitOpen,则只有第一行实际上是有效的。
正确的语法:
PermitOpen <IP>:<port> <IP>:<port> <IP>:<port>
... 以此类推,一行一个。