Usando a função múltipla para obter uma saída em uma única linha

0

Estou tentando criar uma saída que mantém o nome do host, o protocolo ssh e as informações de login raiz com o script bash.

E eu gostaria de fazer isso com o desenvolvimento de funções. Eu desenvolvi o .sh mas não funciona.

Onde está o problema neste sh?

Versão do servidor Red Hat 7

minha saída esperada deve ser:

xyz | hostname | Protocolo X | Acesso à raiz negado

E eu gostaria de começar a produzir "xyz" para analisar minha saída, mas.

 #!/bin/bash


 host(){
 local tmpfile=$(mktemp)
         hostname > "$tmpfile"
 printf '%s' "$tmpfile"
 }

 protocol(){
 local infile="$1"

 cat /etc/ssh/sshd_config  | grep Protocol}

 rootlogin(){

 local infile="$1"

 if [[ $(sudo cat /etc/ssh/sshd_config | grep -i "PermitRootLogin yes" | grep -v "#PermitRootLogin yes") = "PermitRootLogin yes" ]]; then
                       echo  $host
               else
                       echo "Root Access Denied"
 fi
 }

                                 }


 tmpfile=$( host )

    {
         host "$tmpfile"
         protocol "$tmpfile"
         rootlogin "$tmpfile"
 } > fonk.out

 rm -f "$tmpfile"
    
por 1010111100011 15.08.2018 / 08:19

1 resposta

0

O recuo pobre e o layout do seu script atrapalham a pergunta, mas a resposta básica é

printf '%s|%s|%s|%s\n' "$(field1)" "$(field2)" "$(field3") "$(field4)"

Refatorado para isso, e com recuo etc. limpo, seu script se torna

#!/bin/bash

host(){
    hostname
}

protocol(){
    # avoid useless use of cat; get rid of unused parameter
    # ... do you need sudo here too?
    grep Protocol /etc/ssh/sshd_config
}

rootlogin(){
    # straighten out massive spaghetti pretzel; remove unused parameter
    # ... can you avoid sudo cat here?
    if sudo cat /etc/ssh/sshd_config |
        grep -v "#PermitRootLogin yes" |
        grep -i -q "PermitRootLogin yes"
    then
        # Fix quoting
        echo "$host"
    else
        echo "Root Access Denied"
    fi
 }

printf '%s|%s|%s|%s\n' "$1" "$(host)" "$(protocol)" "$(rootlogin)" >fonk.out    

A última linha é um pouco especulativa; seu script atual parece não imprimir o primeiro campo, e não está claro o que deve conter.

Isso não usa mais um arquivo temporário, mas um antipadrão na sua tentativa era criar o arquivo temporário em uma função não relacionada. Quando você realmente precisa de um arquivo temporário, provavelmente seria uma boa ideia criá-lo separadamente e usá-lo como um parâmetro em qualquer lugar. Como

tmp=$(mktemp) || exit
# arrange for temp file to be removed in case of errors or signals, too
trap 'rm -f "$tmp"' EXIT
trap 'exit' ERROR HUP QUIT TRAP TERM

function1 "$tmp"
function2 "$tmp"
: etc
    
por 15.08.2018 / 08:58