Automatisieren Sie Multi-Hop-SSH und SCP mit Passwörtern

498
Tendero

Ich möchte von meinem PC aus auf einen Host zugreifen, aber ich muss zuerst auf einen Zwischenserver zugreifen, da das endgültige Ziel nicht aus dem öffentlichen Internet ersichtlich ist.

Die Sache ist, dass ich folgendes tun muss, um auf den endgültigen Host zuzugreifen. Von meinem pc:

ssh username@server 

Und geben Sie das Passwort ein. Sobald ich dort bin:

ssh username2@finalhost 

Und geben Sie ein anderes Passwort ein.

Das ist ziemlich umständlich, insbesondere wenn scpich die Datei auf den Zwischenserver kopieren muss, bevor ich sie auf den endgültigen Host kopieren kann.

Gibt es eine Möglichkeit, diesen Prozess für Befehle sshund scpBefehle automatisch zu machen ?

0

2 Antworten auf die Frage

4
jjlin

Wenn Sie über OpenSSH 7.3 oder höher verfügen, können Sie ProxyJump in Ihrer SSH-Client-Konfiguration verwenden, um Jump-Hosts anzugeben.

Bearbeiten Sie beispielsweise Ihr ~/.ssh/configund fügen Sie hinzu

Host finalhost HostName finalhost.example.com User username2 ProxyJump username@server 

Jetzt ssh finalhostoder scp file.txt finalhost:.sollte durch den Jump-Host gehen.

Entschuldigung für meine Unwissenheit, ich bin ziemlich neu dabei. Aber wo in dieser Datei werden Passwörter angegeben? Sollten sie nicht daran beteiligt sein, den Zugriff zu automatisieren? Tendero vor 5 Jahren 0
@Tendero ProxyJump speichert keine Passwörter, es automatisiert die Verbindung über einen Zwischenhost ("Jump"). Sie führen so etwas wie "ssh finalhost" oder "scp localsource finalhost: destination" aus, und es verbindet sich automatisch * durch * den Jump-Host mit dem endgültigen Host. Sie werden jedoch nach beiden Passwörtern gefragt. Wenn Sie die Aufforderungen zur Eingabe von Passwörtern vermeiden möchten, ist die beste Option die Verwendung der [Authentifizierung mit öffentlichem Schlüssel] (https://www.ssh.com/ssh/public-key-authentication) anstelle der Speicherung von Passwörtern. Gordon Davisson vor 5 Jahren 3
@Tendero Wenn Sie wirklich Kennwörter verwenden müssen, können Sie möglicherweise etwas wie [sshpass] (https://sourceforge.net/projects/sshpass/) zum Mix hinzufügen, obwohl ich nicht sofort weiß, ob dies funktioniert zwei Passwörter. Aber wie Gordon Davisson sagte, ist es im Allgemeinen am besten, die Pubkey-Authentifizierung zu verwenden. jjlin vor 5 Jahren 0
@ GordonDavisson Ich habe nicht die Möglichkeit, einen der PCs zu konfigurieren, zu denen ich eine Verbindung mit ssh mache. Sie sind sowohl Server als auch Host in meiner Universität, und ich habe nur ein Passwort, um auf sie zuzugreifen. Kann man angesichts dessen, dass dies der Fall ist, die von Ihnen erwähnte Authentifizierung des öffentlichen Schlüssels weiterhin verwenden? (Ich weiß nicht, was das ist, ich werde in ein paar Stunden lesen, um zu sehen, worum es geht.) Tendero vor 5 Jahren 0
@Tendero Für die Authentifizierung mit öffentlichen Schlüsseln muss auf dem Server ein öffentlicher Schlüssel installiert werden (und der private Schlüssel muss auf Ihrem Client übereinstimmen). Können Sie dies zumindest auf dem Zwischenhost tun und eine Kennworteingabe speichern? Die Idee, Server-Passwörter unsicher zu speichern (z. B. in einem Skript), bringt mir die Zähne weh. Schauen Sie sich die Option [sshpass] (https://sourceforge.net/projects/sshpass/) an, die jjlin genannt wird. Gordon Davisson vor 5 Jahren 1
Übrigens: Wenn Sie eine Reihe von Verbindungen zum selben Host herstellen, können Sie die Anzahl der Kennworteingaben durch die Verwendung einer [Master-Verbindung] reduzieren (https://www.linuxjournal.com/content) / speed-multiple-ssh-verbindungen-same-server). Damit würden Sie ssh einmal in einen Server einbinden, diese Verbindung geöffnet lassen, und solange sie vorhanden sind, können Sie zusätzliche ssh- und scp-Verbindungen huckeln, ohne sich erneut authentifizieren zu müssen. Gordon Davisson vor 5 Jahren 0
@ GordonDavisson Ich habe nichts dagegen, die Passwörter unsicher zu speichern. Mein PC wird wirklich nur von mir angesprochen, und der Server und der endgültige Host werden nur zum Experimentieren mit diesen Dingen verwendet. Es ist also nicht so, dass einige wichtige Informationen durchgesickert werden könnten (oder dass sogar die Möglichkeit besteht, dass jemand die Passwörter kennt, weil ich sie in einem Skript gespeichert habe). Kann man den Prozess vor diesem Hintergrund automatisieren? Tendero vor 5 Jahren 0
0
gmathio

Hier ist ein kurzer Block von ~ / .ssh / config, der den Tric ausführt (sogar für alte SSH-Versionen):

Host server User username  Host finalhost User username2 ProxyCommand ssh server -W %h:%p 

Sie deklarieren 2 Hosts, den mittleren Server und den endgültigen Host. Die ssh-Verbindung zum Server ist mit den in der Konfiguration angegebenen Benutzern und Hosts problemlos. Die Verbindung zum finalhost führt einen Sprung auf dem Server aus, wie in der ProxyCommand- Zeile angegeben.

Die zwei magischen Parameter % h und % p werden verwendet, um den aktuellen Host = finalhost und den aktuellen Port = 22 weiterzuleiten (Standard).

Zweitens können Sie den Befehl ssh-copy-id verwenden, um zu verhindern, dass Sie jedes Mal, wenn Sie eine Verbindung zu diesen Computern herstellen, Ihr Kennwort eingeben.

ssh-copy-id server <type server password for the last time>  ssh-copy-id finalhost <type finalhost password for the last time> 

Damit dies funktioniert, müssen Sie zuvor ein Public-Private-Key-Paar mit ssh-keygen generiert haben . Sie können überprüfen, ob sie bereits im Ordner ~ / .ssh vorhanden sind (id_rsa.pub & id_rsa).