Acesse o aplicativo Tomcat Manager de um host diferente

96

Eu instalei o tomcat 9 em um servidor remoto e depois de iniciá-lo, ele foi ativado corretamente, posso acessar http: // host_name: port_num e ver a página do tomcat hello. Mas quando tento abrir o aplicativo gerenciador para ver meus aplicativos implantados, obtenho 403 acesso negado, já adiciono funções no usuário xml do tomcat como segue:

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

As mensagens de erro que vi são:

Por padrão, o Host Manager só pode ser acessado em um navegador em execução na mesma máquina do Tomcat. Se desejar modificar esta restrição, você precisará editar o arquivo context.xml do Host Manager.

Como devo alterar o arquivo context.xml e obter acesso ao aplicativo gerenciador?

Feichangh
fonte

Respostas:

144

Cada webapp implantado tem um context.xmlarquivo que reside em

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

(conf/Catalina/localhost by default)

e tem o mesmo nome do webapp ( manager.xmlneste caso). Se nenhum arquivo estiver presente, os valores padrão serão usados.

Portanto, você precisa criar um arquivo conf/Catalina/localhost/manager.xmle especificar a regra que deseja permitir o acesso remoto. Por exemplo, o seguinte conteúdo de manager.xmlpermitirá o acesso de todas as máquinas:

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

Observe que o atributo allow do Valveelemento é uma expressão regular que corresponde ao endereço IP do host de conexão. Outras Valveclasses atendem a outras regras (por exemplo, RemoteHostValvepara nomes de host correspondentes).

Uma vez que as alterações acima tenham sido feitas, você deverá ver uma caixa de diálogo de autenticação ao acessar a URL do gerenciador. Se você inserir os dados fornecidos, tomcat-users.xmldeverá ter acesso ao gerenciador.

Matt Innes
fonte
o que deve ser feito para carregar essas alterações de configuração sem desligar e iniciar o tomcat?
Kuldeep Yadav
403 Acesso negado
Damir Olejar
3
No tomcat 8, você não precisa fazer nada, essas alterações de configuração entram em vigor imediatamente.
Ayushya
3
Finalmente funcionou para mim depois de algumas tentativas. Eu estava tentando fazer alterações no arquivo context.xml enquanto as alterações deveriam ser feitas no caminho "conf / Catalina / localhost" arquivo manager.xml. Se não existir, basta criar um.
Umar Maniar
Para tomcat 8.5.37, eu também tive que incluir: <Valve className = "org.apache.catalina.valves.RemoteIpValve" />
Md.
154

Para Tomcat v8.5.4 e superior, o arquivo <tomcat>/webapps/manager/META-INF/context.xmlfoi ajustado:

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

Altere este arquivo para comentar o 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>

Depois disso, atualize seu navegador (não é necessário reiniciar o Tomcat), você pode ver a página do gerenciador.

jqgsninimo
fonte
Funciona em 8.5.0, mas foi necessário reiniciar. Obrigado!
JRichardsz de
1
Tive que esperar cerca de 10-15 segundos, mas não foi necessário reiniciar em 8.5.11. Obrigado!
Karl Henselin,
1
Trabalhou em 8.5.9 sem reiniciar. Porém, demorou cerca de 15 segundos para aplicar na máquina Windows 7. Obrigado!
cbmeeks de
403 Acesso negado
Damir Olejar
1
Para iniciantes do Tomcat, um fato significativo nesta questão é que o Tomcat consome vários context.xmlarquivos. As instruções na página de erro padrão do Tomcat para editar o arquivo context.xml do gerenciador podem ser mais claramente declaradas como editar o arquivo context.xml no diretório do aplicativo do gerenciador.
CODE-REaD
12

Para acessar o gerenciador do tomcat de uma máquina diferente, você deve seguir as etapas abaixo:

1. Atualize o arquivo conf / tomcat-users.xml com o usuário e algumas funções :

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

Aqui, o usuário administrador está atribuindo funções = "manager-gui, manager-script, manager-jmx, manager-status" .

Aqui, o usuário e a senha do tomcat são: admin

2. Atualize o arquivo webapps / manager / META-INF / context.xml (permitindo o endereço IP) :

Configuração padrão :

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

Aqui na Valve, é permitido que apenas o IP da máquina local comece com 127. \ d +. \ D +. \ D + .

2.a: Permitir IP específico :

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

Aqui, você apenas substitui | YOUR.IP.ADDRESS.HERE pelo seu endereço IP

2.b: Permitir todos os IP :

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

Aqui, usando allow = ". *" Você está permitindo todos os IPs.

Obrigado :)

Md. Sajedul Karim
fonte
Por favor, adicione um motivo específico para voto negativo. Se esta resposta parecer errada, explique. Após sua explicação, posso aprimorar meus conhecimentos. Obrigado
Md. Sajedul Karim
em vez de permitir o acesso a um único ip, você pode adicionar acesso a todos os ip de uma rede, usando a mesma sintaxe do arquivo padrão: <Valve className = "org.apache.catalina.valves.RemoteAddrValve" allow = "127 \. \ d + \. \ d + \. \ d + | :: 1 | 0: 0: 0: 0: 0: 0: 0: 0: 1 | 192 \ .168 \ .250 \. \ d + "/> isto permite o acesso de todos hosts na rede local 192.168.250.0/24
Thomas LIMIN
3
Essa resposta é a única que especifica YOUR.IP.ADDRESS.HERE- e, portanto, realmente responde à pergunta para acessar o aplicativo gerenciador de um host diferente, não apenas de qualquer lugar na Internet. IMHO esta deve ser a resposta aceita. Sugestão de melhoria: Mova 2.a para o topo, opcionalmente adicione a sugestão de @ThomasLIMIN.
Olaf Kock
3
Following two configuration is working for me.

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

2. context.xml  of <tomcat>/webapps/manager/META-INF/context.xml and 
<tomcat>/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"/>
Rajeev Kumar
fonte
Esta resposta não corresponde a esta pergunta
袁文涛