Der RFC:
präsentiert die SSH-URI als:
ssh://[<user>[;fingerprint=<host-key fingerprint>]@]<host>[:<port>]
Gibt es bekannte Gründe, warum der OpenSSH-Befehl ssh diesem Standard mit der Option hostname nicht folgt? Es akzeptiert keinen Port nach einem Doppelpunkt.
Beispiel für eine URI, von der ich erwartet hatte, dass sie funktioniert:
$ ssh user@host:2222
ssh: Could not resolve hostname host:2222: Name or service not known
-p
Switch verwenden, um einen alternativen Port zu übertragen.Antworten:
ssh
älter als das allgemeinere URI-Format ( 1998 ) um mehrere Jahre (1995 IIRC).quelle
Ich habe dies ursprünglich als Kommentar gepostet, werde es aber als Antwort ein wenig ausarbeiten.
OpenSSH enthält mehrere Dienstprogramme, die zu den bemerkenswertesten davon
ssh
undscp
. Währendssh
nur eine Verbindung zu einem Remotecomputer hergestellt wird (und möglicherweise ein Befehl auf diesem Remotecomputer ausgeführt wird), haben andere Teile von OpenSSH, z. B.scp
eine etwas andere Syntax. Da alle Teil der OpenSSH-Suite sind, teilen diese wahrscheinlich viel Code.Mit geben
scp
Sie eine entfernte Datei in einem Triplett-Formular anuser@host:remotefilename
, wobeiremotefilename
es sich um einen relativen oder absoluten Pfad handeln kann.Wenn der Host - Abschnitt erlaubt wurde auf der Form zu sein
host:port
, wäre dies eine mögliche Zweideutigkeit schaffen: sich[email protected]:2222
bezieht~jdoe/2222
auf host.example.com wenn sie auf dem Standard - Port anschließen, oder bezieht es überhaupt keine Datei (oder noch schlimmer,~jdoe
) auf host.example.com beim Verbinden über Port 2222?Die von Ihnen präsentierte URI-Syntax ist in ihren Ausdrucksmöglichkeiten eingeschränkter (sie erlaubt keine Dateinamenangabe), und was noch wichtiger ist, es kann niemals zu Mehrdeutigkeiten kommen, es sei denn, der tatsächliche Hostname enthält a
:
(was ich nicht glaube) ist sogar in DNS möglich und wird sicherlich nicht häufig durchgeführt, wohingegen rein numerische Dateinamen nicht allzu ungewöhnlich sind.Als SSH ursprünglich entwickelt wurde , wurde es als sicherer Ersatz für die frühere RSH / rlogin-Tool-Suite entwickelt. Ich weiß nicht, wie die Befehlszeilensyntax dafür Anfang der neunziger Jahre lautete (der RFC, der rlogin beschreibt, ist RFC 1282 vom Dezember 1991 und liegt etwa 15 Jahre vor dem von Ihnen zitierten Dokument), aber es scheint nicht unangemessen Vermutlich wurde eine sehr ähnliche Syntax verwendet, da der Benutzername speziell im rlogin-Protokoll übertragen wurde. RFC 1282 zitieren:
Der lokale Benutzername kann über verschiedene Systemeinrichtungen abgerufen werden, aber der Remote-Benutzername muss irgendwie explizit angegeben werden . Abgesehen davon, dass es
@
häufig als "at" ausgesprochen wird und daher zunächst eine ziemlich natürliche Wahl ist, lässt es sichuser@host
gut auf die etablierte Syntax für z. B. E-Mail-Übertragung abbilden (vergleichen Sie eine SMTP-Adresse vonuser@host
, bei der es sichhost
möglicherweise um einen tatsächlichen Host oder einen DNS-Namen handelt, auf den ein MX-Eintrag zeigt zu einem tatsächlichen Gastgeber), also war es wahrscheinlich eine einfache Wahl, anstatt sich etwas Neues auszudenken.Es ist auch erwähnenswert, worauf Stephane Chazelas in einem Kommentar hingewiesen hat : Das Dokument, auf das Sie sich beziehen, ist kein RFC, sondern ein derzeit sieben Jahre alter Entwurf, der nach einer schnellen Google-Suche zur Bestätigung nie in Gang gekommen zu sein scheint . Das passiert die ganze Zeit; Es wird etwas vorgeschlagen, das jedoch nicht die Unterstützung erhält, um es tatsächlich zu einem RFC zu machen (und selbst viele, viele RFCs sind keine Standards).
quelle