Azure虚拟机SSH隧道连接失败,终端可正常SSH连接求助
问题描述
- 已通过PuTTY正常SSH连接Azure虚拟机(私钥有效),但无法通过SSH隧道在本地浏览器访问Webmin GUI
- 尝试操作及对应问题:
- PuTTY隧道配置:
- 源端口填
10005,远程地址填Azure虚拟机IP:10000 - 已选私钥,能正常进入SSH终端,但浏览器访问
localhost:10005提示ERR_CONNECTION_REFUSED
- 源端口填
- plink命令尝试:
返回:plink.exe mykey.ppk -L 10005:localhost:10000 myuser@xx.xxx.xx.183Unable to open connection: Host does not exist - PowerShell SSH命令尝试:
返回:ssh -L 10005:localhost:10000 myuser@xx.xxx.xx.183myuser@xx.xxx.xx.xxx: Permission denied (publickey).
- PuTTY隧道配置:
排查与修复步骤
1. 修正PuTTY隧道的远程地址配置
PuTTY的远程地址应填localhost:10000,而非Azure虚拟机的公网IP:10000。因为隧道是将本地端口转发到虚拟机的本地回环地址(Webmin默认监听localhost:10000),填公网IP会导致虚拟机尝试从公网访问自身,受网络限制无法连通。
正确配置流程:
- 进入
SSH > Tunnels:- 源端口:
10005 - 目标地址:
localhost:10000 - 勾选本地和自动,点击「添加」
- 源端口:
- 重新连接SSH后,访问
localhost:10005
2. 修正plink命令语法
plink指定私钥需用-i参数,直接写私钥文件名会被识别为主机名,导致「Host does not exist」错误。正确命令:
plink.exe -i mykey.ppk -L 10005:localhost:10000 myuser@xx.xxx.xx.183
3. 解决PowerShell SSH的公钥认证问题
PowerShell的SSH客户端默认读取~/.ssh/id_rsa等默认路径的密钥,自定义私钥需指定路径,且不支持PuTTY的.ppk格式,需先转换为OpenSSH格式的.pem文件:
- 转换密钥格式:
- 打开PuTTYgen,加载
.ppk文件 - 点击
Conversions > Export OpenSSH key,保存为.pem文件 - 右键
.pem文件→属性→安全→高级→禁用继承→删除所有用户权限→添加当前用户并赋予读取权限
- 打开PuTTYgen,加载
- 正确命令:
ssh -i "C:\路径\到\你的\密钥文件.pem" -L 10005:localhost:10000 myuser@xx.xxx.xx.183
4. 验证虚拟机上的Webmin监听状态
登录虚拟机SSH终端,执行以下命令检查Webmin是否在监听localhost:10000:
sudo netstat -tulpn | grep 10000
- 若输出显示
127.0.0.1:10000,说明监听正常;若显示0.0.0.0:10000则是监听所有地址,隧道仍可正常使用 - 若无输出,说明Webmin未启动,执行
sudo systemctl start webmin启动服务
5. 检查虚拟机本地防火墙
确保虚拟机防火墙允许10000端口的本地访问(隧道转发至虚拟机本地,无需开放公网端口):
# 若使用ufw防火墙 sudo ufw allow 10000/tcp # 若使用iptables sudo iptables -A INPUT -p tcp --dport 10000 -s 127.0.0.1 -j ACCEPT
内容的提问来源于stack exchange,提问作者Emmanu
相关产品推荐
相关产品推荐

