SSH em outra VM via script Perl / Sh falhando. Funciona manualmente

1

Eu quero executar um script Perl CGI ( a_web_page.cgi ) da minha dev box .1.20 que executa um script bash da mesma pasta ( host_script.sh ).

Este script então executa um comando SSH para outro servidor 1.10 que executa um script que simplesmente retorna uma string.

Executar o script manualmente ( ./host_script.sh ) funciona desde que eu faça me o proprietário das chaves. (As chaves são armazenadas na mesma pasta que os scripts, para teste).

Por padrão, o proprietário das chaves é apache .

A questão é que, mesmo com apache possuindo essas chaves, ainda não funciona. Eu expliquei abaixo.

Estes comandos estão sendo executados a partir de uma vm em 192.168.1.20 . (dev box) Entrei nesta VM via ssh da minha caixa local em 192.168.1.50

  • 192.168.1.10 Máquina de destino com script1.sh . Este script retorna uma string.
  • 192.168.1.20 Servidor que executa o servidor da web do apache e tem a_web_page.cgi e host_script.sh . (Eu estou executando esses comandos nesta caixa.)
  • 192.168.1.50 Minha máquina local, não deveria realmente levar em consideração, mas coloque aqui apenas no caso de isso ajudar.

De 192.168.1.20 :

ls -a -l

-rwxrwxrwx. 1 me apache  622 Apr 12 09:19 a_web_page.cgi
-rwxrwxrwx. 1 me apache  111 Apr 11 15:14 host_script.sh
-rwx------. 1 apache apache 1675 Apr 11 15:11 test
-rwx------. 1 apache apache  392 Apr 11 15:11 test.pub

vim host_script.sh

#!/bin/bash
ssh -i /var/www/html/dev/remote_script/test [email protected] "/home/user/scripts/script1.sh"

a_web_page.cgi

#!/usr/bin/perl

use strict;
use warnings;

print "Content-type: text/html\n\n";

my $executeString = './host_script.sh';
my $output = '$executeString';
print "<br />$executeString<br />: $output<br />";

Saída ( link ):

./host_script.sh
: 

sudo tail -f / var / log / httpd / error_log

[Tue Apr 12 10:05:22 2016] [error] [client 192.168.1.50] ssh: connect to host 192.168.1.10 port 22: Permission denied\r

(Estou confuso porque o IP do cliente é minha caixa local e não a caixa dev)

ifconfig

 inet addr:192.168.1.20

(Se eu executar o ifconfig na minha caixa local saindo da minha sessão SSH, eu receberei 192.168.1.50 .)

Nesta fase, posso ver que o SSH para 192.168.1.10 está falhando, então vamos dar-me permissões para executar o host_script.sh diretamente e executá-lo.

sudo me manda testar

Isso funciona.

./ host_script.sh

This is a script on the 192.168.1.10 server!

(Esta string é retornada de script1.sh on 1.10 , é apenas uma instrução echo)

Então, executar o script como eu funciona bem, desde que eu tenha permissões para ler as chaves.

-rwx------. 1 me apache 1675 Apr 11 15:11 test
-rwx------. 1 me apache  392 Apr 11 15:11 test.pub
    
por Joseph 12.04.2016 / 04:55

1 resposta

1

Quando você está executando manualmente o comando ssh, eu suponho que você tenha configurado o ssh e o ~ user / .ssh sem senha tem as chaves necessárias. Ao executar isso via página web, o ssh é executado como usuário apache (ou usuário httpd) e ~ apache / .ssh é usado para as chaves. Esse usuário não tem ssh sem senha, então "Permission Denied".

Você está vendo a página web a partir de 192.168.1.50, portanto, isso é mostrado em error.log e o erro é que o ssh (rodando em 192.168.1.20) não pôde se conectar a 192.168.1.10, o que é correto.

Várias maneiras de corrigir isso:
- Dê acesso ao sudo ao apache, de modo que o apache possa executar o ssh como seu próprio usuário: algo como "sudo -u-me-c 'ssh 192.168.1.10' script1.sh '", onde o apache usará o sudo para mudar para você e execute ssh.
- Faça o apache ter um Home Directory em ambos os hosts e configure o ssh sem senha para o usuário do apache, e execute tudo como o apache.

Se você estiver preocupado com problemas de segurança, procure soluções alternativas, como serviços da Web.

    
por 12.04.2016 / 10:24