从不同的主机访问Tomcat Manager应用程序

yhuiod9q  于 2023-10-19  发布在  其他
关注(0)|答案(6)|浏览(164)

我已经在远程服务器上安装了tomcat9,启动后,它被带到了罚款,我可以访问和看到tomcathello页面。但是当我试图打开管理器应用程序来查看我部署的应用程序时,我得到了403访问拒绝,我已经在tomcat用户xml中添加了角色,如下所示:

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

我看到的错误消息是:

  • 默认情况下,只能从与Tomcat运行在同一台计算机上的浏览器访问Host Manager。如果您希望修改此限制,则需要编辑Host Manager的context.xml文件。*

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

huwehgph

huwehgph1#

对于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),就可以看到管理器页面。

ncgqoxb0

ncgqoxb02#

每个部署的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地址代替你的.IP.ADDRESS.HERE(或其他有用的表达)。
其他Valve类满足其他规则(例如,RemoteHostValve用于匹配主机名)。Tomcat的早期版本使用阀类org.apache. Catalina .valves.RemoteIpValve进行IP地址匹配。
完成上述更改后,在访问管理器URL时,应该会显示一个身份验证对话框。如果您输入您在tomcat-users.xml中提供的详细信息,您应该可以访问Manager。

qyzbxkaa

qyzbxkaa3#

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

1.更新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"/>

这里admin用户正在分配roles=“manager-gui,manager-script,manager-jmx,manager-status”
这里tomcat的用户名和密码是:管理员

2.更新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中,它只允许本地机器IP以**127.\d +.\d+.\d+**开始。

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.地址.这里**与您的IP地址

2.b:允许所有IP

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

这里使用**allow=".*"**表示允许所有IP。
谢谢您的支持:)

5q4ezhmt

5q4ezhmt4#

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

  1. tomcat-users.xml详细信息
<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./webapps/manager/META-INF/context.xml和/webapps/host-manager/META-INF/context. xml的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"/>
polhcujo

polhcujo5#

以下是我在AWS Linux 2上使用的sed命令,以通过AWS EC2用户数据脚本实现此功能:

注意:这允许从所有IP“.”访问,如果您不希望这样,请将最后一个to sed命令中的“.”更改为您想要的任何IP。
将以下内容更改为您想要的内容:

YOUR USER NAME
YOUR PASSWORD

另外,请将/abcd替换为tomcat安装的位置,以更新tomcat安装的路径:

/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
jobtbby3

jobtbby36#

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

相关问题