如何在浏览器中使用JavaScript获取服务器的host key
浏览器环境原生JS无法直接实现
ssh-keyscan等价功能 原因如下:
- 普通网页运行在浏览器的安全沙箱中,JS的网络能力被严格限制,仅支持HTTP/HTTPS、WebSocket等高层协议请求,没有权限直接建立原始TCP连接访问目标服务器的22 SSH端口,自然无法完成SSH协议交互拉取主机公钥。
- 仅Chrome扩展、Chrome App等需要用户主动授权的特殊运行环境,才可以调用专属的
socket类API实现TCP连接,完全无法在通用公网网页场景落地。
可落地的替代方案(需要自有服务端配合)
如果你的业务场景允许接入自有后端做中转,可按以下逻辑实现:
- 后端写一个简单的HTTP接口,接收前端传入的目标主机名参数,在服务端调用
ssh-keyscan工具拉取对应主机的公钥 - 前端通过原生
fetch调用该接口即可拿到目标公钥,前端示例代码如下:
async function fetchSshHostPublicKey(hostname) { try { const response = await fetch(`/your-backend-api/ssh-pubkey?host=${encodeURIComponent(hostname)}`); if (!response.ok) throw new Error('接口请求失败'); return await response.text(); } catch (err) { console.error('拉取SSH主机公钥失败:', err); return null; } }
如果你的运行场景是Node.js服务端而非浏览器,可以直接使用ssh2等第三方SSH库直接实现拉取逻辑,不需要额外中转。
内容的提问来源于stack exchange,提问作者c_anirudh
相关产品推荐
相关产品推荐

