Access Tomcat Manager App from different host

我已经在一个远程服务器上安装了 tomcat 9,在启动它之后,它已经恢复正常,我可以访问 http://host_name:port_num并查看 tomcat 的 hello 页面。但是,当我试图打开管理器应用程序来查看我部署的应用程序时,我得到403访问被拒绝,我已经在 tomcat 用户 xml 中添加了如下角色:

<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<user username="user" password="password" roles="admin,manager,manager-gui"/>

我看到的错误消息是:

By default the Host Manager is only accessible from a browser running on the same machine as Tomcat. If you wish to modify this restriction, you'll need to edit the Host Manager's context.xml file.

我应该如何更改 context.xml 文件并访问 Manager 应用程序?

190783 次浏览

每个部署的 webapp 都有一个 context.xml文件

$CATALINA_BASE/conf/[enginename]/[hostname]


(conf/Catalina/localhost by default)

并且与 webapp 具有相同的名称(本例中为 manager.xml)。如果不存在文件,则使用默认值。

因此,需要创建一个文件 conf/Catalina/localhost/manager.xml并指定要允许远程访问的规则。例如,manager.xml的以下内容将允许从所有机器访问:

<Context privileged="true" antiResourceLocking="false"
docBase="${catalina.home}/webapps/manager">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^YOUR.IP.ADDRESS.HERE$" />
</Context>

请注意,Valve元素的 allow 属性是与连接主机的 IP 地址匹配的正则表达式。因此,请将您的 IP 地址替换为 YOUR.IP.ADDRESS.Here (或其他一些有用的表达式)。

Other Valve classes cater for other rules (e.g. RemoteHostValve for matching host names). Earlier versions of Tomcat use a valve class org.apache.catalina.valves.RemoteIpValve for IP address matching.

完成上述更改后,在访问管理器 URL 时,应该会出现一个身份验证对话框。如果您输入了您在 tomcat-users.xml中提供的详细信息,您应该可以访问 Manager。

对于 Tomcat v8.5.4及以上版本,已经对文件 <tomcat>/webapps/manager/META-INF/context.xml进行了调整:

<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
</Context>

更改此文件以注释 Valve:

<Context antiResourceLocking="false" privileged="true" >
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
</Context>

之后,刷新浏览器(不需要重新启动 Tomcat) ,就可以看到管理器页面。

以下两种配置对我来说是有效的。

  1. tomcat-users.xml details


      <role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="tomcat"/>
    

<user  username="tomcat"  password="tomcat" roles="tomcat"/>
    

<user  username="admin"  password="admin" roles="admin-gui"/>
    

<user  username="adminscript"  password="adminscrip" roles="admin-script"/>
    

<user  username="tomcat"  password="s3cret" roles="manager-gui"/>
<user  username="status"  password="status" roles="manager-status"/>
    

<user  username="both"    password="both"   roles="manager-gui,manager-status"/>
    

<user  username="script"  password="script" roles="manager-script"/>
<user  username="jmx"     password="jmx"    roles="manager-jmx"/>
  1. Xml/webapps/manager/META-INF/context.xml 和 /webapps/host-manager/META-INF/context.xml


<Context antiResourceLocking="false" privileged="true" >
    

<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow=".*" />
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>


要从不同的机器访问 tomcat 管理器,您必须遵循以下步骤:

1. 使用 user 和一些角色 更新 conf/tomcat-users.xml 文件:

<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status"/>

这里管理员用户分配 Role = “ manager-gui,manager-script,manager-jmx,manager-status”

这里的 tomcat 用户和密码是: 管理员

更新 webapps/manager/META-INF/context.xml 文件(允许 IP 地址) :

默认配置 :

<Context antiResourceLocking="false" privileged="true" >
  

<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
  

<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

在 Valve 中,它只允许本地机器从 127. d + . d + . d + 启动 IP。

2. a: 允许特定 IP :

<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|YOUR.IP.ADDRESS.HERE" />

在这里,您只需用您的 IP 地址替换 这是你的地址

2. b: 允许所有 IP :

<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow=".*" />

Here using Allow = “ . *” you are allowing all IP.

谢谢:)

因为我必须通过艰苦的方式学习默认的 \etc\tomcat\server.xml文件(至少在 OpenSUSE v15.2版本的 v9.0.36中)已经包含了管理器和主机管理器应用程序的 <Context ...><Valve ...>定义!这些明显推翻了您在其他地方定义的 context.xmlmanager.xml文件。默认情况下,它们限制对 localhost 的访问,这正是我所看到的。| |-(因此,需要调整 server.xml中的设置,或者删除/注释它们,然后可以像以前一样添加其他响应中提到的文件。

下面是我在 AWS Linux 2上通过 AWS EC2用户数据脚本使用的 sed 命令:

注意: 这允许从所有 IP 访问”。* “如果你不想要,就改变”。最后一个命令是“ sed”命令,可以访问任何 IP 地址。

将以下内容更改为您想要的:

YOUR USER NAME
YOUR PASSWORD

Also, update the path to your tomcat install by replacing /abcd with wherever your tomcat is installed:

/abcd/tomcat/conf/tomcat-users.xml
/abcd/tomcat/webapps/manager/META-INF/context.xml
/abcd/tomcat/webapps/host-manager/META-INF/context.xml

命令:

# Add a user to Tomcat manager
sed -i 's/<\/tomcat-users>//g' /abcd/tomcat/conf/tomcat-users.xml
echo '<user name="YOUR USER NAME" password="YOUR PASSWORD" roles="manager-gui,admin-gui" />' | tee -a  /abcd/tomcat/conf/tomcat-users.xml
echo '</tomcat-users>' | tee -a  /abcd/tomcat/conf/tomcat-users.xml


# Set the Tomcat Manager apps to allow connections from everywhere
# Note: the -r forces sed to respect full regex
sed -i -r 's/127\\\.\\d\+\\\.\\d\+\\\.\\d\+\|::1\|0:0:0:0:0:0:0:1/\.\*/g' /abcd/tomcat/webapps/manager/META-INF/context.xml
sed -i -r 's/127\\\.\\d\+\\\.\\d\+\\\.\\d\+\|::1\|0:0:0:0:0:0:0:1/\.\*/g' /abcd/tomcat/webapps/host-manager/META-INF/context.xml