Hallo!
Ich arbeite zwar gerade auf Solaris, denke aber, dass das in diesem Fall kein großer Unterschied ist.
Hintergrund:
Die Datei /etc/ssh_known_hosts dürfen wir normalen User nicht anfassen. Das heißt, dass dort auch keine Hosts eingetragen werden können. Wir müssen also bei jeder ssh-Verbindung von diesem Rechner auf einen anderen den Host händisch verifizieren. Das sieht bekanntlich so aus:
The authenticity of host '[xyz]:22 ([11.22.33.44]:22)' can't be established.
RSA key fingerprint is 11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:00.
Are you sure you want to continue connecting (yes/no)?
Das wäre nicht weiter schlimm, wenn wir nicht Skripte schreiben würden, die eine ssh-Verbindung auf einen anderen Rechner aufmachen müßten. Die brechen dann nämlich ab, weil die den Host nicht verifizieren können. Oder, im Besten Fall, fragen jedesmal nach. Sehr nervig.
Also habe ich mal ein wenig gegoogled und folgende Lösung gefunden. ssh kennt den Parameter UserKnownHostsFile. Damit kann ich ssh sagen, dass er eine andere hosts-Datei als die Default /etc/ssh_known_hosts nutzen soll. Der Aufruf sieht dann so aus:
ssh -o UserKnownHostsFile=~/.ssh/known_hosts
Dadurch wird die Datei ~/.ssh/known_hosts genutzt um die Hosts zu speichern. Damit ist es nun auch den eingeschränkten Usern möglich fingerprints zu speichern.
Das Problem:
Das Ganze funktioniert auch mit scp. Aber nur für einen Host. also so:
scp -o UserKnownHostsFile=~/.ssh/known_hosts user@server:/datei .
Wenn ich nun einen Transfer zwischen zwei Rechnern machen will, klappt es nciht mehr:
scp -o UserKnownHostsFile=~/.ssh/known_hosts user@server:/datei user2@server2:/datei
Beim 2. Server will er IMMER in die /etc/hosts Datei schreiben. Natürlich habe ich einen Eintrag in der ~/.ssh/known_hosts für Server 1 und Server 2 angelegt. Genutzt wird der 2. jedoch nicht.
Ich bin am verzweifeln….
Nachtrag:
Es gibt anscheinend mehrere Möglichkeiten das Problem zu lösen (ich habe die Option UserKnownHosts weggelassen, damit die Beispiele übersichtlicher werden):
- Man öffnet eine ssh Verbidung nach Server 1 und setzt dort dann das scp ab:
ssh user@server "scp /datei user2@server2:/datei"
- Man geht einen Umweg und kopiert die Datei zuerst auf den lokalen Rechner und dann weiter:
scp user@server:/datei . && scp datei user2@server2:/datei"
- Im Ubuntuusers-Forum hat man mich auf eine weitere, “perverse” Möglichkeit aufmerksam gemacht
ssh user@server "cat quelle | ssh user2@server2 'cat > ziel'"
Das hab ich jedoch noch nicht probiert…