Ich möchte folgendes tun:manuell eingestellt SSH-Host-Schlüssel auf dem Server/Digital-Ozean-Droplet
- erstellen Digital-Ozean-Tröpfchen aus meiner Entwicklung Maschine (meine Tests zu verteilen, die zu lange einnehmen).
- Geben Sie sicher Befehle an das Droplet aus.
- Zerstöre das Tröpfchen.
Ich bin auf # 2 fest. Ich kann die Tröpfchen erfolgreich über die Digital Ocean API erstellen, und ich kann meinen SSH-Schlüssel im Bereich authorized_keys
einstellen, aber wenn ich Digital Ocean erlaube, den Schlüssel zu erstellen, kann ich den öffentlichen Schlüssel des Servers nicht überprüfen.
Nun, normalerweise, wenn dies im selben Rechenzentrum wäre, wäre das kein Problem, da ich mich darauf verlassen konnte, dass Digital Ocean keinen MITM-Angriff implementiert, weil sie sowieso root haben, aber da ich von meiner Entwicklung aus verbinde Ich brauche einen Weg, dem öffentlichen Schlüssel zu vertrauen.
Ich habe versucht, nach verschiedenen Cloud-Init-Führer, aber ich bekomme immer die Fehlermeldung:
ssh [email protected]
Connection closed by 178.62.69.133
Ich habe versucht, für Fehler jede Möglichkeit zu beseitigen, habe ich sogar zu base64 gegriffen den privaten kodiert Schlüssel, denken, dass es einige Fluchtprobleme geben könnte.
Dies ist der Befehl, den ich die Schlüssel erstellen verwenden:
e = "ssh-keygen -t ecdsa-sha2-nistp256 -f #{loc} -q -N #{password} -C \"\""
system(e)
auf das sich diese erweitert:
ssh-keygen -t ecdsa-sha2-nistp256 -f /tmp/testing-60f42fcf -q -N 77924d8f4fa12a365c8c003ca091f5ad6a2c4c22 -C ""
ich dann base64 kodieren sie,
private_key = `base64 --wrap=0 #{loc}`.chomp
public_key = `base64 --wrap=0 #{loc}.pub`.chomp
und platzieren in die Cloud-Init-YAML-Datei (wollte nicht |
verwenden, weil es ein Sonderzeichen in Yaml ist, und ich
#cloud-config
---
runcmd:
- echo test > /root/test
- rm /etc/ssh/ssh_host*
- echo LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tClByb2MtVHlwZTogNCxFTkNSWVBURUQKREVLLUluZm86IEFFUy0xMjgtQ0JDLEY3MDNDNzM1QTAxQzgyNEVBRjhCODA4NkVDREIyMjAwCgpiYlpCa3A2Ujcyd1RRNUsyL2w4QW9YU3FQNllRVjV0aVJETytmU1FqZTlEUjY4MG9wY3RCRGhKRWdPQ0prSkw1CmhOUGxydzUveHFwTHM5UXc3cWJaWlUvRHR0YnlxZTFWUDcyVHBRS1pFL2FDcTdGTWFpbFJrcUpFa3JobVdCcFEKbWtQTW15M3BwVFZZKzJvRDZTdmMzdzZyTW1JTlpKUkltRUxiUk81S2M4bz0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo=
> /tmp/base64_pri && base64 --decode /tmp/base64_pri > /etc/ssh/ssh_host_ecdsa_key
- echo ZWNkc2Etc2hhMi1uaXN0cDI1NiBBQUFBRTJWalpITmhMWE5vWVRJdGJtbHpkSEF5TlRZQUFBQUlibWx6ZEhBeU5UWUFBQUJCQkVHSDJBS3BVcVE0NVZQWGNFK3h5NXV6elVnajhKelBxODJNaERLV0szaGltUVBReWRPQ0RlRVdyRVJzeCtUTEtPSjBlRElJWU9jT2RWT0FteHZycG1nPSAK
> /tmp/base64_pub && base64 --decode /tmp/base64_pub > /etc/ssh/ssh_host_ecdsa_key.pub
- sleep 1 && service ssh restart
(Keine Sorge, dass SSH-Schlüssel/Tröpfchen zerstört wurden, ist dies zu Demonstrationszwecken)
ich überprüfen kann, dass, wenn ich den Rest auslassen: wollte es, wenn möglich, vermeiden) der Befehle, die echo test > /root/test
erfolgreich ausgeführt wird. Ich habe auch diese auf meinem lokalen Rechner und die MD5-Summen entsprechen getestet:
028760a9374f9abd9c2c66eceb20f245 /tmp/pub_key_check
028760a9374f9abd9c2c66eceb20f245 /tmp/testing-60f42fcf.pub
2bf65516aaef01c731d061fa4ba788c5 /tmp/pri_key_check
2bf65516aaef01c731d061fa4ba788c5 /tmp/testing-60f42fcf
So weiß ich, dass ich sie richtig bin Decodierung.
Ich habe andere Schlüsseltypen versucht, aber ich würde gerne Ecdsa-Schlüssel verwenden, wenn möglich, weil es der Standard für meine anderen Boxen ist. Was mache ich hier falsch? Bin ich auch der Einzige, der das macht? Ich habe Google herum und es sieht so aus, als ob die allgemeine Antwort ist, dass Leute den generierten öffentlichen Schlüssel automatisch trauen, was ich für verrückt halte, wenn Sie dieses cross-Rechenzentrum tun, da ein beliebiger ISP (oder in meinem Fall ein Café) könnte passiv MITM du.
Es gibt keine Art, wie 'ecdsa-SHA2-nistp256'. In der Handbuchseite gibt es eine Auswahl aus '[-t dsa | Ecdsa | ed25519 | rsa | rsa1] '(zumindest auf meinem ubuntu). – Jakuje
@Jakuje Danke für die Idee, aber das Ändern von ti auf 'ecdsa' oder' rsa' behebt das Problem nicht. – zachaysan