Iremos admitir que você já sabe instalar o Apache e já utiliza-o com PHP, HTML,…caso não saiba pesquise na internet como instalá-los. O bom de usar CGI é que você pode executar comando do Shell Script na sua página Web.
A maioria das distribuições já possuem o módulo CGI do Apache configurado e com o suporte a ele.
Caso deseje certificar-se de que o módulo já está carregado, basta verificar em
Obs: Estou usando o Editor Nano, mas vc pode usar o de sua preferência. Logue-se como root , se não possuir o sudo.
su
nano /etc/apache2/mods-available/cgi.load
Veja se dentro do arquivo aberto há essa linha descomentada
LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so
Certifique-se também de que já está habilitado
nano /etc/apache2/mods-enabled/cgi.load
Se estiver comentado (#), “descomente” e salve o arquivo.
Agora vamos informar ao Apache quais os formatos que desejamos trabalhar
nano /etc/apache2/mods-enabled/mime.conf
Procure nele a linha que possui o seguinte código
#AddHandler cgi-script .cgi
Se estiver comentado, “descomente” e adicione o .sh no final, deixando-o assim
AddHandler cgi-script .cgi .sh
Caso não esteja habilitado, rode esse comando para leitura de arquivos CGI
a2enmod cgi
Por padrão no Debian Jessie há uma pasta que manda o http://localhost/cgi-bin/ para /usr/lib/cgi-bin , ou seja, se você pôr um arquivo cgi dentro de /usr/lib/cgi-bin automaticamente quando vc acessar seu http://localhost/cgi-bin/ ele irá acessar /usr/lib/cgi-bin. Mas caso vc deseje alterar o endereço, para por exemplo: http://localhost/sh/ , então vc precisa editar o arquivo 000-default.conf e adicionar uma linha do com ScriptAlias nele, assim
nano /etc/apache2/sites-available/000-default.conf
E adicione ANTES da tag o seguinte código
ScriptAlias /sh/ /usr/lib/cgi-bin/
Salve-o e depois restarte o Apache
systemctl restart apache2
Ou só releia o arquivo de configuração:
service apache2 reload
Depois é só criar um arquivo teste, exemplo o que vou disponibilizar aqui abaixo, salvá-lo no diretório /usr/lib/cgi-bin e depois acessar o endereço http://localhost/cgi-bin/ ou http://localhost/sh/ , dependendo se vc criou alias do Document Root ou não, e ver se está tudo ok.
Após salvar o arquivo, não esqueça de dar permissão de visualização para ele
chmod a+x /usr/lib/cgi-bin/teste.cgi
Arquivo teste.cgi
#!/bin/bash
echo "content-type: text/html"
echo
echo
echo "
<html> <head> <meta charset='utf-8' /> <title> CGI script </title> </head>
<body>
<h1>Algumas informações sobre a máquina que o CGI está rodando:</h1>
"
echo "<h4>uptime</h4>"
echo "<pre>$(uptime)</pre>"
echo "<h4>uname</h4>"
echo "<pre>$(uname -a)</pre>"
echo "<h4>/proc/cpuinfo</h4>"
echo "<pre>$(cat /proc/cpuinfo)</pre>"
echo "
</body>
</html>
"
Caso deseje, fiz esse script que faz TODAS AS ETAPAS acima descritas para Habilitar CGI e .sh no Apache, se não quiser rodá-lo, veja as alterações que ele efetua!
#!/bin/bash
# ./enable-cgi-apache2.sh
# esse script habilita cgi e .sh no apache do debian jessie
[[ $(id -u) != 0 ]] || echo -e "Permissão negada, é root?\nAbortar.";exit 1
echo "aguarde habilitando cgi e .sh no apache..."
VersaoApache=$(apache2 -v | sed -n 1p | awk {'print $3'} | cut -d/ -f2)
echo "versao do apache2: $VersaoApache"
echo "LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so" > /etc/apache2/mods-available/cgi.load
echo "LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so" > /etc/apache2/mods-enabled/cgi.load
sed -i 's/\#AddHandler cgi\-script \.cgi/AddHandler cgi\-script \.cgi \.sh/' /etc/apache2/mods-enabled/mime.conf
a2enmod cgi
_TEMP=$(mktemp)
cat /etc/apache2/sites-available/000-default.conf > $_TEMP
echo "ScriptAlias /sh/ /usr/lib/cgi-bin/" > /etc/apache2/sites-available/000-default.conf
cat $_TEMP >> /etc/apache2/sites-available/000-default.conf
systemctl restart apache2
service apache2 reload
/etc/init.d/apache2 restart
_TESTE=$(mktemp)
wget https://goo.gl/zjBMn8 -O $_TESTE 2>/dev/null
cat $_TESTE > /usr/lib/cgi-bin/teste.sh
chmod a+x /usr/lib/cgi-bin/teste.sh
echo "configuração realizada."
echo "acesse: http://0.0.0.0/sh/teste.sh"
exit 0
debian shellscript apache dicas