Ich möchte squid.conf
von einem Server auf einen anderen kopieren .
- Die Server sprechen nicht miteinander. Ich möchte meine Workstation durchgehen.
- Beide Server haben die Datei, daher wird sie auf dem Ziel überschrieben.
- Die Dateien haben die
600
Berechtigung und gehören root. - root login via ssh ist deaktiviert (
PermitRootLogin no
). - Ich würde es gerne in einer Zeile tun, wenn es möglich ist, da es Teil einer Installationsanleitung sein wird.
Ich weiß es zu tun
ssh source 'tar czpf - -C /etc/squid/ squid.conf' | \
ssh target 'tar xzpf - -C /etc/squid/'
Kopieren von Dateien zwischen Servern und Beibehalten von Berechtigungen. In diesem Fall erhalte ich jedoch die Meldung "Erlaubnis verweigert".
Ich weiß auch, dass ich das kann:
ssh -t source 'sudo cat /etc/squid/squid.conf'
Auf diese Weise -t
kann sudo das Administratorkennwort anfordern, bevor der Inhalt der Datei ausgegeben wird.
Das Problem ist, dass ich nicht weiß, wie ich diese Techniken zu etwas kombinieren soll, das auf jedem Server nach dem sudo-Passwort fragt und die Datei an ihren Zielort überträgt. Ist das möglich?
UPDATE : Hier ist das Beste, was ich mir einfallen lassen konnte:
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'
Dies als Einzeiler zu bezeichnen, scheint eine Strecke zu sein. Ich denke, ich werde es nur aufteilen, um Schritte in der Setup-Anleitung zu trennen.
quelle
Antworten:
Es ist einfacher, ssh mit ssh zu verketten, als ssh mit sudo zu verketten. Das Ändern der SSH-Serverkonfiguration ist also in Ordnung. Ich empfehle, SSH für das Stammverzeichnis jedes Servers zu öffnen, jedoch nur von localhost aus. Sie können dies mit einer
Match
Klausel insshd_config
:Anschließend können Sie eine schlüsselbasierte Authentifizierungskette von Remote-Benutzer zu lokalem Benutzer und von lokalem Benutzer zu Root einrichten. Sie haben immer noch einen Authentifizierungspfad, sodass in Ihren Protokollen angegeben ist, wer sich als root angemeldet hat, und die Authentifizierungsschritte sind die gleichen, als ob sudo beteiligt wäre.
Um eine Verbindung zu einem Server als Root herzustellen, definieren Sie einen Alias
~/.ssh/config
wie folgt:Wenn Sie auf der Verwendung bestehen
sudo
, benötigen Sie meines Erachtens separate Befehle, da dassudo
Lesen von einem Terminal (auch wenn es ein Ticket für Ihr Konto enthält) ¹ und keine der üblichen Dateikopiermethoden (scp, sftp, rsync) erforderlich ist. Unterstützung der Interaktion mit einem Remote-Terminal.Wenn Sie sich an ssh und sudo halten, könnten Ihre vorgeschlagenen Befehle vereinfacht werden. Wenn Sie sudo so eingerichtet haben, dass kein Kennwort mehr abgefragt wird, können Sie es einmal ausführen, um die Kennwortanforderung zu umgehen, und ein weiteres Mal, um die Datei zu kopieren. (Sie können die Datei nicht einfach direkt kopieren, da die Passwortabfrage im Weg ist.)
¹ es sei denn du hast
NOPASSWD
, aber dann würdest du das nicht fragen.quelle
Match host localhost
.Sie können festlegen, dass
sudo
auf folgende Weise kein Kennwort abgefragt wird:An der Quelle:
Am Ziel:
Und mach auf deiner Maschine:
Aber ich empfehle so etwas wie eine Marionette . Es ist viel besser und einfacher, Ihr Problem mit der Verteilung von Konfigurationsdateien zu lösen.
PS. Wenn Sie den
sudo
Benutzer nach dem Kennwort fragen, wird die Zeichenfolge mit[sudo] password for user
in der Zieldatei angezeigt.quelle
Anstelle von ssh können Sie scp verwenden, um die Datei zwischen den Servern zu übertragen.
Melden Sie sich beim Zielserver an:
Wechseln Sie in das Zielverzeichnis, in das Sie die Datei kopieren möchten.
r - rekursiv p - Behält die Änderungszeiten, Zugriffszeiten und Modi der Originaldatei bei
quelle
Ohne die ssh-Konfiguration zu ändern, können Sie über die ssh-Verbindung zu server2 zwei ssh-Tunnel host-> server1 und server2-> host erstellen. Verbinden Sie diese beiden Tunnel auf dem Host-Computer (gleicher Port). Führen Sie sudo auf Server2 aus, um Daten aus verbundenen Tunneln auf Server1 abzurufen und auf Server2 zu speichern.
Die Idee ist: 1- einen lokalen Tunnel von Ihrem Computer zum Quellcomputer auf Port 60000 zu erstellen
1b - Erstellen Sie einen Remote-Tunnel, um zu Ihrer Maschine zurückzukehren
2- Stellen Sie eine Verbindung zum Zielcomputer her
3- Führen Sie alle als root auf dem Zielcomputer zum Schreiben aus
4- Stellen Sie über den Tunnel eine Verbindung zur Quellmaschine her. whoami und on localhost bedeuten den localhost auf dem $ {target} Rechner.
5- Packen Sie die Remote-Datei (en) und senden Sie sie komprimiert an stdout
6- Empfangen Sie das Paket über stdout und extrahieren Sie die Dateien entsprechend im Verzeichnis / path / to / target
Hinweis: Sie können bis zu 3 Bestätigungen und 3 Passwortanfragen erhalten. Dateien werden jedoch kopiert.
quelle