1.有公网 IP ,并且用了 curl ifconfig.me 检测了。2.sudo ufw status 看到防火墙规则 22 Allow Anywhere ,并且 sshd.conf 里 port 是 22;3.局域网内 ssh 能正常连接,就是公网 IP 连不上,报错:Permission denied求解,是不是还有哪里做了限制?

进调试模式看看啊,在 ssh 连接时加参数“-vvv”。

大概就是建立连接,然后到我 C 盘找私钥但是没有:.ssh/id_rsa: No such file or directory;最后使用密码登录,然后报错 Permission denied.密码肯定没错的,局域网能正常连。

在服务器那边用命令 journalctl -u ssh 看看对应时段的报错是什么,这样应该更容易排查

Permission denied 是验证失败可以看看/etc/ssh/sshd_config 是否设置了什么东西

局域网能正常连的那台机器和你从公网连的机器是同一台吗?不是同一台的话估计是你没开密码认证,只开了公钥认证,而局域网的机器有公钥,公网机器没公钥。

你是用自己的公网连公网?

同一公网下连接的吗?

sshd 里设置了 PasswordAuth yes ;用内网穿透工具后能连上,公网 IP 不行。telnet 公网 IP 22 又能连通,好奇怪。

家里连公司

确定内网穿透和公网直连是同一台? 简单判断方法 看看指纹是否一致,看~/.ssh/know_hosts 文件,对应两行字断

你这是想从家里访问公司局域网内部的一台服务器?然后这台服务器从公司局域网是正常访问的?请问你公司路由器有无做端口映射局域网对应 ip 的端口?请问贵公司允许这么操作么?有无安全隐患?

你用 curl ifconfig.me 检测到的只是你从机器出去的 IP ,你需要 ifconfig 检查一下你每个网卡绑定的 IP 是多少,如果公网 IP 不是绑定到你的某个网卡上的话,能不能从外边进来就不是你这台机器能就决定的了。curl ifconfig.me 可能只是你的出口路由器拿到的公网 IP 而已

可以试试换一个 ssh 终端,比如有的系统版本就是要用 xshell 才能连

简单的网络环境说明下呢?以下是猜想听到局域网,那假设你是家庭使用,恰好路由器开了 ssh 服务,路由器拨号,你目前的这个 linux 机器是一台局域网的机器,本身应该是没有公网 ip 的,通过公网访问到了你的路由器

有公网 IP ,并且用了 curl ifconfig.me 检测了。这里顶多能说明你有外网访问,并无法说明你有公网 ip.

想了一下,确实外网 ssh 密码太容易爆破了。还是算了

公网 IP/可以访问到部署的项目

试试换个端口,我之前是光猫开启 DMZ ,访问主路由 22 不行,翻日志翻防火墙设置都找不到线索,最后换个 10000+ 的端口就可以了。

你如果挂了梯子,看看你的机场是不是关了 22 端口

你的 ssh ip 有没有过梯子?如果有你把梯子关了试试。

permission denied 显然是已经连上了啊要不然这句话谁发给你的

同一台电脑吗?是不是密钥不对?公网的 IP ,连到路由上去了吧?

这个也不一定说明你的机器有公网 ip 啊,如果是网络方面针对做了端口映射呢?所以,最好发出来你的网络环境在讨论吧

你能确定你公网转发进去的就是你的那个主机?

换个端口试试 运营商可能不许使用 80 443 22