2017-05-07 318 views
0

我在使用官方JavaScript代碼的客戶端上使用Guacamole 0.9.12-incubating - 服務器端延伸GuacamoleHTTPTunnelServlet。 Guacamole服務器從源代碼編譯並運行在Ubuntu 17.04上。Guacamole SSH斷開連接,沒有鍵盤

SSH連接成功建立,但15秒後斷開連接。沒有鍵盤筆畫和鼠標正在工作。

May 7 17:14:09 dev guacd[4071]: Creating new client for protocol "ssh" 
May 7 17:14:09 dev guacd[4071]: Connection ID is "$30e2e833-5640-4bc9-92c3-929ced3d6e0e" 
May 7 17:14:09 dev guacd[4382]: User "@4209df46-e26a-4ced-93c4-c264578f85a5" joined connection "$30e2e833-5640-4bc9-92c3-929ced3d6e0e" (1 users now present) 
May 7 17:14:10 dev guacd[4382]: SSH connection successful. 
May 7 17:14:24 dev guacd[4382]: User is not responding. 
May 7 17:14:24 dev guacd[4382]: User "@4209df46-e26a-4ced-93c4-c264578f85a5" disconnected (0 users remain) 
May 7 17:14:24 dev guacd[4382]: Last user of connection "$30e2e833-5640-4bc9-92c3-929ced3d6e0e" disconnected 
May 7 17:14:25 dev guacd[4382]: SSH connection ended. 
May 7 17:14:25 dev guacd[4071]: Connection "$30e2e833-5640-4bc9-92c3-929ced3d6e0e" removed. 

客戶端JavaScript與文檔中的相同 - https://guacamole.incubator.apache.org/doc/gug/writing-you-own-guacamole-app.html

當我在servlet中使用方法時,它們向我展示了按鍵筆畫。所以問題可能在servlet和guacd之間?

@Override 
protected void doWrite(HttpServletRequest request, HttpServletResponse response, String tunnelUUID) throws GuacamoleException { 
     LOGGER.debug("Do WRITE to session " + tunnelUUID); 
     super.doWrite(request, response, tunnelUUID); 
    } 

@Override 
protected void doRead(HttpServletRequest request, HttpServletResponse response, String tunnelUUID) throws GuacamoleException { 
     LOGGER.debug("Do read to session " + tunnelUUID); 
     super.doRead(request, response, tunnelUUID); 
    } 

連接已經建立,但沒有擊鍵工作: SSH connection established (in browser)

感謝。

回答

0

問題出現在Spring Boot中,正如那裏討論的那樣 - https://glyptodon.org/jira/si/jira.issueviews:issue-html/GUAC-1252/GUAC-1252.html

解決方案是創建自己的實現的HiddenHttpMethodFilter

@Configuration 
public class GuacamoleServletConfiguration { 

    @Bean 
    public GuacamoleServlet guacamoleTunnelServlet() { 
     return new GuacamoleServlet(); 
    } 

    @Bean 
    public ServletRegistrationBean servletRegistrationBean() { 
     ServletRegistrationBean bean = new ServletRegistrationBean(guacamoleTunnelServlet(), "/remote/tunnel"); 
     bean.setOrder(Ordered.HIGHEST_PRECEDENCE); 
     return bean; 
    } 

    @Bean 
    public HiddenHttpMethodFilter hiddenHttpMethodFilter() { 
     return new HiddenHttpMethodFilter() { 
      @Override 
      protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { 
       if ("POST".equals(request.getMethod()) && request.getRequestURI().startsWith("/remote/tunnel")) { 
        filterChain.doFilter(request, response); 
       } else { 
        super.doFilterInternal(request, response, filterChain); 
       } 
      } 
     }; 
    } 
}