我编写了一个使用库ganymed-ssh2-build210.jar的Servlet(它使用这些类:import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.Session; import ch.ethz.ssh2 .StreamGobbler;)通过SSH连接运行命令(出于测试目的,它连接到我的本地机器)。当我将我的类作为一个独立的应用程序运行时它可以工作,但当我将它部署到Tomcat并且Tomcat将它作为Servlet启动时,我得到了这个例外(我已经切断了结束,因为我认为它可能不相关,但如果有帮助的话,我可以把它全部包括在内:
java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:22 connect,resolve)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.SecurityManager.checkConnect(SecurityManager.java:1034)
at java.net.Socket.connect(Socket.java:513)
at ch.ethz.ssh2.transport.TransportManager.establishConnection(TransportManager.java:340)
at ch.ethz.ssh2.transport.TransportManager.initialize(TransportManager.java:448)
at ch.ethz.ssh2.Connection.connect(Connection.java:643)
...
这可能与安全策略有关吗?如果是这样,你知道我如何改变它们吗?
我正在使用Java 1.6和Tomcat6。
答案 0 :(得分:0)
看起来java在端口22上被拒绝访问 - 您确定要尝试连接作为客户端,而不是生成服务器吗?如果它试图将侦听器绑定到端口22,除非您以超级用户身份运行,否则很可能会出现错误。
答案 1 :(得分:0)
您是否在启用-security参数的情况下运行Tomcat?如果是这样,您需要编辑$ CATALINA_BASE / conf / catalina.policy并允许ch.ethz.ssh2.transport访问java.net.Socket。