Atribui lista de arquivos remote_keys remotos à variável local

2

Gostaria de atribuir uma lista de arquivos de chaves remotas autorizadas a uma variável local.

INCLUDE=$(ssh myhost.mydomain.com "for Z in 'awk -F : '{print $1}' /etc/passwd'; do INCLUDE+=\"/home/${Z}/.ssh/authorized_keys \"; done; echo $INCLUDE")

Como posso escapar corretamente do comando acima para torná-lo uma solicitação válida?

    
por J0hnG4lt 11.01.2013 / 13:07

3 respostas

1

Usando esta declaração você obtém algum resultado estranho como / home / bin, / home / root ou / home / daemon.

for Z in 'awk -F : '{print $1}' /etc/passwd'; do INCLUDE+="/home/${Z}/.ssh/authorized_keys "

ls /home/*/.ssh/authorized_keys se encaixa melhor.

O script resultante pode ser:

INCLUDE=$(ssh [email protected] "ls /home/*/.ssh/authorized_keys")

Mas você precisa se conectar como root ao servidor ssh

    
por 11.01.2013 / 13:46
0
sgeorge-mn:~ sgeorge$ cat awk_ssh.sh 
ssh -q [email protected] <<'HERE'
cat /etc/passwd | grep '/bin/bash'| awk -F: '{system("ls /home/"$1"/.ssh/authorized_keys")}'
HERE

sgeorge-mn:~ sgeorge$ INCLUDE=$(bash awk_ssh.sh)
[email protected]'s password: 

sgeorge-mn:~ sgeorge$ echo $INCLUDE
/home/root/.ssh/authorized_keys /home/suku/.ssh/authorized_keys
    
por 11.01.2013 / 14:29
0

O método mais propenso a erros seria, na verdade, obter o diretório HOME de cada usuário do banco de dados passwd e verificar os arquivos authorized_keys . Observe também que o openssh suporta os arquivos authorized_keys AND authorized_keys2 .

Este comando deve fornecer essa lista:

getent passwd | awk -F: '$6!=""{print $6}' | \
    xargs -rI{} find {} -maxdepth 2 -mindepth 2 \
        -path \*/.ssh/\* \
        \( -name authorized_keys -o -name authorized_keys2 \) \
        -type f 2>/dev/null

Você tem que escapar aspas apropriadamente, se você estiver indo para executá-lo via ssh. No entanto, você pode colocá-lo no arquivo de script e alimentá-lo no /bin/sh no lado remoto:

<scriptfile ssh remote.host /bin/sh
    
por 21.02.2013 / 17:01