Come usare ssh e sudo insieme in bash?


10

Non sono stato in grado di trovare una domanda che descriva questo scenario specifico.

Sto cercando di eseguire uno script bash molto semplice per recuperare la registrazione da più macchine. Sto eseguendo lo script localmente ma devo accedere a una macchina esterna tramite ssh, nonché sudo in un utente privilegiato una volta su quella macchina ...

ssh myuser@machine.net
sudo su  - privledged_user
cat logs > file.txt

Eseguirlo con sh -x rivela che bash si blocca sulla linea 'ssh'. Quindi ho provato a rivederlo a questo:

ssh myuser@machine.net sudo su - privledged_user cat logs > file.txt

Anche questo sembra bloccarsi indefinitamente. C'è una soluzione migliore a questo problema ?? Non vedo un modo per aggirare usando sudo su da quello che posso dire ...

Grazie per qualsiasi aiuto!


Perché il voto stretto? Questa domanda è sull'argomento: gestione dell'hardware o del software di server, workstation, archiviazione o reti, strumenti utilizzati per amministrare, monitorare o automatizzare questi
jlliagre

Risposte:


5

Il modo in cui ottengo questo risultato nel mio ambiente attuale è eseguire ssh con la -tbandiera che forza l'allocazione tty e quindi eseguire sudo -u root al suo interno, come segue:

ssh -t hostname << EOF
  command1
  sudo -u root command2
  sudo -u otheruser "command3 | command4"
  sudo -u root /bin/bash -c "command5; command6; command7"
  command8 && ( sudo -u otheruser /bin/bash -c "cmd1 ${1}; cmd2 {$2}" ) || echo cmd2 did not work

EOF

Ho il mio account su sudoers sul lato remoto in modo che non sia richiesta alcuna password.

Questo esempio mostra diversi modi per farlo all'interno di una singola sessione ssh, incluso l'esecuzione di più comandi con bash o all'interno di una subshell. Si noti inoltre che se si inserisce il codice sopra in uno script eseguibile, è possibile passare argomenti della riga di comando ($ 1 e $ 2) a ssh e questi verranno espansi e quindi referenziati sul lato remoto.


Sfortunatamente perché non gestisco il server remoto, credo di essere bloccato usando sudo su qui. Funzionerebbe ancora in questo formato?
Matt124234,

sì, funzionerà anche. è possibile inserire la password quando richiesto.
Michael Martinez,

Ho provato: ssh -t mrhyner@stg-app3.indeed.net << EOF sudo su - adcentrl egrep 'ERROR \ | WARN' / home / adcentrl / cronjobs / logs / * / * EOF Ma ho ricevuto: "Pseudo -terminal non verrà allocato perché stdin non è un terminale. "
Matt124234,

perfettamente bene. ignora quell'avvertimento e procedi. se vuoi puoi disabilitare "RequireTty" in / etc / sudoers sul telecomando
Michael Martinez,

5

Se non vuoi o non puoi impedire a sudo di chiederti la password, un semplice trucco è leggerlo localmente e memorizzarlo in una variabile locale:

read -p 'Password: ' -s password

ssh -t user@1.2.3.4 <<EOF
  echo "$password" | sudo -S whoami
EOF

1

Se sudo è configurato per consentire comandi senza password, questo dovrebbe fare quello che vuoi:

ssh myuser@machine.net "sudo su - privileged_user -c 'cat logs'" > file.txt

o

ssh myuser@machine.net "sudo su - privileged_user -c 'cat logs > file.txt'"

a seconda che si desideri file.txtcreare il file in locale o in remoto.

Altrimenti, ecco un modo per passare la password dell'utente remoto a sudo:

echo mrhyner_password | \
  ssh mrhyner@test-server.net \
  "sudo -S su - adcentrl -c 'egrep ERROR\|WARN /home/adcentrl/cronjobs/logs/*/*'"

Molto interessante. Comunque usare ssh senza -t mi dice "nessun regalo presente". L'aggiunta di -t rimuove questo errore ma non sembra onorare "sudo su" poiché mi richiede una password. Ecco in particolare cosa sto facendo: ssh -t mrhyner@test-server.net "sudo su - adcentrl -c egrep" ERROR \ | WARN "/ home / adcentrl / cronjobs / logs / * / *" Questo mi dà: bash : WARN: comando non trovato [sudo] password per mrhyner:
Matt124234

Mi dispiace, a quanto pare non so come formattare i miei commenti in questa cosa
Matt124234,

Supponevo che sudo fosse configurato per essere senza password per il tuo account remoto.
jlliagre,

e ti mancano virgolette singole extra.
jlliagre,

Lo è, il che mi ha fatto pensare che bash non stia onorando il comando ssh per qualche motivo. Si sta comportando come se stessi provando a eseguire il sudo dal mio host locale = \
Matt124234 il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.