无法通过Guacamole API生成的SSH直连URL连接Linux虚拟机
Guacamole API生成SSH直连URL连接失败问题
需求与问题
需要通过Guacamole API生成SSH直连URL,让用户通过浏览器访问Linux虚拟机。按以下步骤操作后,生成的URL在浏览器中始终处于等待状态无法连接,但Guacamole控制台可正常连接该虚拟机。
操作步骤
步骤1:创建SSH连接并生成JSON配置
在Guacamole中创建connectionId为287的SSH连接,生成如下JSON配置:
{"username":"","expires":1716440632,"connections":{"287":{"protocol":"SSH","parameters":{"hostname":"IP OF MY LINUX MACHIE","port":"22","username":"USER","password":"PASSWD"}}}}
步骤2:加密JSON配置
使用加密脚本和密钥4C0B569E4C96DF157EEE1B65DD0E4D41加密上述JSON:
./encrypt-json.sh 4C0B569E4C96DF157EEE1B65DD0E4D41 auth.json
步骤3:获取authToken
发送curl请求获取令牌:
curl --location 'https://{baseUrl}/api/tokens' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'data=Xirte6W6mrr+a1XyyNH8qgt+LRiyzCy6nckw4KvnXE0/kRjUs3mZj0S6ZctrRr3MPULGmqyGMEC4gHWMtReGTdHB+AboJ9CfdqUa3o7LCQbmGigDO9Hd/tQ08gTkQkCPkDYky6We+AYDSZeg/HLtFVoqGOwPOwAaeygmLYlkyCvq9GgMbAVKzqS59sZOqtTRJi7LYSAiOexYM/LKUUrwO47xbYrLKjIhp4amA5WlhuZIxRMDUcQDr1292Wd/Hzx9TTTzQxshI1hWJMdEq6xNsu3ksvGMVBeXm5mheqe31rBJ+2qUHnlzVyAAB90ieNzWnC1hwhcA0TfvVlrmOOog/gipKDknEhPp1K900e8iP1/8JLUHxXeKhtS8AQGim1j1D33wlG+Ey0TSItmLhiJ/FXIKhEpkql1Zo'
返回结果:
{ "authToken": "F0060F333BBAF137B927E42C4AFDD5032FE3E7706EBDFC55286CCBC59D0CFCE9", "username": "administrator", "dataSource": "json", "availableDataSources": [ "postgresql", "postgresql-shared", "json" ] }
步骤4:拼接直连URL
将authToken作为参数拼接成URL:
https://{baseUrl}/guacamole/#/?token=F0060F333BBAF137B927E42C4AFDD5032FE3E7706EBDFC55286C
排查与解决建议
- 确保authToken完整:步骤4中的token被截断,必须使用步骤3返回的完整authToken(
F0060F333BBAF137B927E42C4AFDD5032FE3E7706EBDFC55286CCBC59D0CFCE9),部分令牌会导致验证失败。 - 修正加密data参数格式:curl请求中的data值不能有换行,必须是连续的Base64字符串,换行会导致参数传递不完整。
- 验证JSON配置有效性:
- 替换
hostname占位符为Linux虚拟机的真实IP - 检查
expires时间戳是否在当前时间之后,过期令牌无法使用
- 替换
- 确认密钥一致性:加密用的密钥必须和Guacamole服务器
guacamole.properties中json-auth-secret配置完全一致,大小写、长度均不能出错。 - 检查网络与权限:
- 确认浏览器所在网络可访问Guacamole服务器及Linux虚拟机的22端口
- 在Guacamole服务器上手动执行
ssh USER@真实IP测试连通性,确保服务器有权限连接目标虚拟机SSH服务
内容的提问来源于stack exchange,提问作者Manish Sharma
相关产品推荐
相关产品推荐

