Atualizando um monte de Macs via SSH. Poderia usar alguma ajuda

1

tudo.

Estou trabalhando em um script que será executado em nosso servidor Mac, e ele (esperançosamente) atualizará todos os nossos Macs via Munki (repo está no mesmo servidor) e o comando softwareupdate integrado .

Aqui está meu script até agora:

#!/bin/bash
ADMIN_PASS='cat /Users/adminuser/Documents/Update\ Script/enPass.txt | base64 --decode'
ADMIN_USER="adminuser"
HOST_LIST="/Users/adminuser/Desktop/hosts.txt"

for HOST in $(< $HOST_LIST); do
  echo ""
  echo "--------------------------------"
  echo "# CONNECTING TO: $HOST #"
  echo "--------------------------------"
  echo ""

  ssh -tt $ADMIN_USER@$HOST sudo su << UPDATE
    echo "Connected to host!"
    /usr/local/munki/managedsoftwareupdate -v --auto

    softwareupdate -ia

    shutdown -r now

UPDATE

  echo ""
  echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
  echo "~~ Update script completed sucessfully on $HOST ~~"
  echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
  echo ""

done

Eu sei que atualmente não estou usando a variável ADMIN_PASS neste script. Eu me envolvi com isso em versões anteriores, e acho que é provavelmente o caminho a percorrer em termos de segurança (se você tem uma sugestão melhor, eu sou todo ouvidos!).

De qualquer forma, quando executo este comando como está, ele retruca:

--------------------------------
# CONNECTING TO: 192.168.0.120 #
--------------------------------

    echo "Connected to host!"
    /usr/local/munki/managedsoftwareupdate -v --auto

    softwareupdate -ia

    shutdown -r now

Password:
Sorry, try again.
Password:

Estou assumindo que o "Desculpe, tente novamente." é devido ao comando echo sendo lançado no prompt de senha, mas não tenho certeza da sintaxe para fazer com que essa coisa funcione corretamente com sudo su , pois a variável ADMIN_PASS é local e não pode ser passada para o script ssh sem armazenar o arquivo no cliente remoto (certo?).

Eu preciso deste script para ser executado automaticamente sem qualquer entrada do administrador, e eu realmente gostaria de evitar colocar qualquer parte dele nos sistemas cliente. Se alguém pudesse lançar alguma luz sobre porque não está funcionando, eu realmente aprecio isso. Eu sou bastante verde quando se trata de bash scripting, então, por favor, tenha isso em mente.

    
por zomgdavidbowie 21.11.2014 / 19:24

1 resposta

0

Descobri isso. Aqui está meu script funcional:

#!/bin/bash
ADMIN_PASS="$(cat /Users/adminuser/Documents/UpdateScript/enPass.txt)"
ADMIN_USER="adminuser"
HOST_LIST="/Users/adminuser/Desktop/hosts.txt"

for HOST in $(< $HOST_LIST); do
  echo ""
  echo "--------------------------------"
  echo "# CONNECTING TO: $HOST #"
  echo "--------------------------------"
  echo ""

  ssh -tt $ADMIN_USER@$HOST << ENDSSH

    echo 'Connected to host!'
    echo $ADMIN_PASS | base64 -d | sudo -S /usr/local/munki/managedsoftwareupdate -v --auto
    echo 'Finished Munki Update!'
    echo $ADMIN_PASS | base64 -d | sudo -S softwareupdate -ia
    echo 'Finished Apple Software Update!'
    echo $ADMIN_PASS | base64 -d | sudo -S shutdown -r now
    logout

ENDSSH


  echo ""
  echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
  echo "~~ Update script completed successfully on $HOST ~~"
  echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
  echo ""

done

A passagem explícita da variável $ADMIN_PASS para cada comando que eu queria executar parece funcionar bem. Eu supus que, como isso seria executado em um Mac remoto, a variável $ADMIN_PASS local não funcionaria. Eu continuarei mexendo com isso, já que não gosto do fato de que ele exibe em destaque o valor em enPass.txt toda vez que echo $ADMIN_PASS é usado. Esperava que essa sintaxe a enviasse para o comando base64 -d e a mantivesse fora da janela do Terminal.

Isso funciona bem. Se alguém tiver sugestões, me avise. Também estou curioso para saber o quão seguro é esse script. Se meu cérebro está funcionando corretamente, acho que a senha criptografada está sendo enviada para o sistema cliente, e ENTÃO é descriptografada antes de ser usada nos comandos sudo -S .

    
por 24.11.2014 / 19:34

Tags