Vorrei copiare squid.conf
da un server all'altro.
- I server non parlano tra loro. Vorrei esaminare la mia postazione di lavoro.
- Entrambi i server hanno il file, quindi verrà sovrascritto sulla destinazione.
- I file hanno
600
permesso e sono di proprietà di root. - Il login root tramite ssh è disabilitato (
PermitRootLogin no
). - Vorrei farlo in una riga, se possibile, poiché farà parte di una guida all'installazione.
So di fare
ssh source 'tar czpf - -C /etc/squid/ squid.conf' |
ssh target 'tar xzpf - -C /etc/squid/'
per copiare file tra server e preservare le autorizzazioni. Tuttavia, in questo caso riceverò "Autorizzazione negata".
So anche che posso farlo:
ssh -t source 'sudo cat /etc/squid/squid.conf'
In questo modo il -t
consente a sudo di richiedere la password di amministratore prima di emettere il contenuto del file.
Il problema è che non so come combinare quelle tecniche in qualcosa che richiederà la password sudo su ciascun server e trasferirà il file alla sua destinazione. È possibile?
AGGIORNAMENTO :Ecco il meglio che sono riuscito a trovare:
ssh -t source 'sudo tar czf /tmp/squid.tgz -C /etc/squid squid.conf' &&
ssh source 'cat /tmp/squid.tgz' |
ssh target 'cat >/tmp/squid.tgz' &&
ssh -t source 'sudo rm /tmp/squid.tgz' &&
ssh -t target
'sudo tar xzf /tmp/squid.tgz -C /etc/squid && sudo rm /tmp/squid.tgz'
Chiamarlo one-liner sembra un tratto. Penso che lo analizzerò in passaggi separati nella guida all'installazione.
Risposta accettata:
È più facile concatenare ssh con ssh che concatenare ssh con sudo. Quindi modificare la configurazione del server ssh è ok, suggerisco di aprire ssh per root di ciascun server, ma solo da localhost. Puoi farlo con un Match
clausola in sshd_config
:
PermitRootLogin no
Match Host localhost
PermitRootLogin yes
Quindi puoi impostare una catena di autenticazione basata su chiave da utente remoto a utente locale e da utente locale a root. Hai ancora un percorso di autenticazione, quindi i tuoi log ti dicono chi ha effettuato l'accesso come root e i passaggi di autenticazione sono gli stessi di sudo.
Per connetterti a un server come root, definisci un alias in ~/.ssh/config
così:
Host server-root
HostName server.example.com
User root
ProxyCommand "ssh server.example.com nc %h %p"
Se insisti nell'usare sudo
, credo che avrai bisogno di comandi separati, come sudo
insiste a leggere da un terminale (anche se ha un ticket per il tuo account)¹, e nessuno dei soliti metodi di copia dei file (scp, sftp, rsync) supporta l'interazione con un terminale remoto.
Rimanendo con ssh e sudo, i comandi proposti potrebbero essere semplificati. Su ogni lato, se hai impostato sudo per non chiedere più una password, puoi eseguirlo una volta per superare il requisito della password e un'altra volta per copiare il file. (Non puoi copiare facilmente il file direttamente perché la richiesta della password si intromette.)
ssh -t source 'sudo true'
ssh -t target 'sudo true'
ssh -t source 'sudo cat squid.conf' |
ssh -t target 'sudo tee /etc/squid/squid.conf'
¹ a meno che tu non abbia NOPASSWD
, ma allora non lo chiederesti.