使用VSCode通过Tailscale SSH连接时权限拒绝问题排查
我搭建了包含两个节点的Tailscale网络:一个标记为tag:server的Ubuntu 22.04服务器,一个标记为tag:client的Windows笔记本。我希望通过VSCode的Remote SSH插件访问服务器,但反复收到Permission Denied错误。
我的配置
ACL配置
{ "groups": { "group:admin": [<my_email_address>], }, "tagOwners": { "tag:server": ["group:admin"], "tag:client": ["group:admin"], }, "acls": [ {"action": "accept", "src": ["*"], "dst": ["*:*"]}, ], "ssh": [ { "action": "accept", "src": ["group:admin"], "dst": ["tag:server"], "users": ["autogroup:nonroot"], }, ], "nodeAttrs": [ { "target": ["tag:server"], "attr": ["funnel"], }, ], }
SSH配置
Host homeserver User <non_root_username> HostName homeserver.<my_tailnet_id>.ts.net
现象与日志
通过Admin Console进行SSH连接可正常工作,但CMD.exe、VSCode Remote及VSCode Tailscale扩展连接均失败,提示无额外上下文的Permission Denied错误。
使用ssh -vvv得到的连接日志:
C:\Users\this_user>ssh -vvv username@homeserver.<my_tailnet>.ts.net OpenSSH_for_Windows_8.6p1, LibreSSL 3.4.3 debug1: Reading configuration data C:\\Users\\this_user/.ssh/config debug1: C:\\Users\\this_user/.ssh/config line 10: Applying options for homeserver.<my_tailnet>.ts.net debug3: Failed to open file:C:/ProgramData/ssh/ssh_config error:2 debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts' -> 'C:\\Users\\this_user/.ssh/known_hosts' debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts2' -> 'C:\\Users\\this_user/.ssh/known_hosts2' debug1: Authenticator provider $SSH_SK_PROVIDER did not resolve; disabling debug2: resolving "homeserver.<my_tailnet>.ts.nett" port 22 debug3: ssh_connect_direct: entering debug1: Connecting to homeserver.<my_tailnet>.ts.net [100.110.num.num] port 22. debug3: finish_connect - ERROR: async io completed with error: 10013, io:000002B367DC5260 debug1: connect to address 100.110.num.num port 22: Permission denied ssh: connect to host homeserver.<my_tailnet>.ts.net port 22: Permission denied
注:日志中的SSH配置错误为误报,实际配置存储在Users/this_user/.ssh目录下。
请问哪里操作有误?该如何修复SSH权限问题?
从日志里的error:10013和连接失败情况来看,问题大概率出在Windows防火墙、Tailscale SSH代理配置或者Ubuntu服务器的SSH设置上,按以下步骤排查修复:
1. 检查Windows防火墙规则
Windows的防火墙可能拦截了SSH连接请求(错误10013通常是权限被防火墙阻止):
- 打开Windows Defender防火墙,进入「高级设置」
- 确认是否有允许
ssh.exe(OpenSSH客户端)出站连接的规则,如果没有,手动添加:- 新建出站规则,选择「程序」,指向
C:\Windows\System32\OpenSSH\ssh.exe - 允许连接,应用到所有网络类型(包括Tailscale的虚拟网络)
- 新建出站规则,选择「程序」,指向
2. 强制使用Tailscale的SSH代理
Admin Console能连成功是因为它用了Tailscale内置的SSH代理,而本地OpenSSH默认直接连服务器22端口,可能被服务器防火墙或Tailscale ACL限制。修改本地SSH配置:
更新~/.ssh/config中的Host配置:
Host homeserver User <non_root_username> HostName homeserver.<my_tailnet_id>.ts.net ProxyCommand tailscale ssh --proxy=%h:%p
这样所有SSH请求都会走Tailscale的代理通道,和Admin Console的连接方式一致。
3. 验证Ubuntu服务器的SSH设置
- 登录Ubuntu服务器,检查
/etc/ssh/sshd_config:- 确保
PasswordAuthentication或PubkeyAuthentication已开启(根据你使用的认证方式) - 确认你用的非root用户在
AllowUsers列表中(如果配置了该选项)
- 确保
- 重启sshd服务:
sudo systemctl restart sshd
4. 确认Tailscale节点的SSH状态
在Ubuntu服务器上执行tailscale status,确认节点已正确标记tag:server,且Tailscale SSH功能已启用:
- 如果未启用,执行
sudo tailscale set --ssh开启Tailscale SSH
5. 检查Tailscale ACL的SSH规则
当前ACL的SSH规则允许group:admin访问tag:server的非root用户,确认:
- 你的Windows节点已属于
group:admin(在Admin Console的用户组中检查) - 服务器上的非root用户确实存在,且你在SSH配置中填写的用户名正确
完成以上步骤后,重新尝试用VSCode Remote SSH或CMD连接,即可解决Permission Denied问题。
内容的提问来源于stack exchange,提问作者noobvorld

