Zum Inhalt

31. Mai 2024 · Server & Hosting · 3 Min. Lesezeit

Verbindung zum Server mit SSH, rsync und scp

Meine Notizen zur SSH-Anmeldung, zur Schlüsselverwaltung und zum Kopieren und Synchronisieren von Dateien mit rsync und scp.

Mein Ziel

Als Webentwickler muss ich mich über die Kommandozeile auf Servern anmelden können. Ausserdem möchte ich Dateien kopieren und Verzeichnisse synchronisieren.

Dafür verwende ich SSH, rsync und scp.

SSH

Benötigte Pakete installieren

bash
sudo apt install rsync openssh-client wget

SSH-Schlüssel erstellen

bash
ssh-keygen -b 4096

Für den Schlüssel verwende ich eine sichere Passphrase und lasse sie nicht leer.

Öffentlichen Schlüssel auf dem Server hinterlegen

Auf dem Zielserver wird mein öffentlicher Schlüssel aus der Datei id_rsa.pub in folgende Datei eingetragen:

text
~/.ssh/authorized_keys

Dort werden die öffentlichen Schlüssel der Personen aufgeführt, die sich per SSH-Schlüssel anmelden dürfen.

Wenn ich den Ordner und die Datei selbst erstelle, setze ich die Berechtigungen mit diesen Befehlen:

bash
sudo chmod 700 ~/.ssh
bash
sudo chmod 600 ~/.ssh/authorized_keys

SSH-Agent

Damit ich die Passphrase nicht bei jeder Verbindung erneut eingeben muss, habe ich in meiner ursprünglichen Notiz einen SSH-Agent vorgesehen.

Dafür steht dieser Eintrag in meiner Fish-Konfiguration:

bash
eval $(ssh-agent -c)

Nach einer Änderung starte ich das Terminal neu oder lade die Konfiguration:

bash
source .config/fish/config.fish

rsync

Ich verwende rsync, um Dateien und Verzeichnisse zu synchronisieren. Für die Übertragung von und zu Servern verwende ich dabei SSH.

Inhalt eines Serververzeichnisses übertragen

In meiner ursprünglichen Notiz steht folgender Befehl:

bash
rsync -avz --rsh='ssh -p ' username@serveradresse.com:/pfad/zu/meinordner/ lokalerordner/

Achtung: Hinter ssh -p fehlt die Portnummer. Der Befehl muss vor der Verwendung angepasst werden.

Der abschliessende Schrägstrich bei meinordner/ ist in meiner Notiz dafür vorgesehen, den Inhalt des Ordners zu übertragen.

Einen ganzen Ordner übertragen

Für die Übertragung des gesamten Ordners steht in meiner Notiz:

bash
rsync -avz --rsh='ssh -p ' username@serveradresse.com:/pfad/zu/meinordner .

Auch hier fehlt hinter ssh -p die Portnummer.

Der Punkt bezeichnet das aktuelle lokale Verzeichnis. Im Unterschied zum vorherigen Beispiel steht hinter meinordner kein abschliessender Schrägstrich.

scp

Mit scp kopiere ich einzelne Dateien vom oder zum Server.

Datei vom Server kopieren

bash
scp user@servername:/pfad/zu/meinordner/meinedatei.dateityp .

Datei zum Server kopieren

bash
scp meinedatei.dateityp user@servername:/pfad/zu/meinzielordner/

Notiz zum Terminalfenster

In meinem damaligen Debian-Terminal habe ich in den Fenstereigenschaften die Fenstergrösse auf 9999 gestellt, um weiter nach oben scrollen zu können.