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
und scp
. Während ssh
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 an user@host:remotefilename
, wobei remotefilename
es sich um einen relativen oder absoluten Pfad handeln kann.
Wenn der Host - Abschnitt erlaubt wurde auf der Form zu seinhost:port
, wäre dies eine mögliche Zweideutigkeit schaffen: sich jdoe@host.example.com: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:
Beim Verbindungsaufbau sendet der Client vier nullterminierte Zeichenfolgen an den Server. Die erste ist eine leere Zeichenfolge (dh sie besteht nur aus einem einzelnen Null-Byte), gefolgt von drei Nicht-Null-Zeichenfolgen: dem Client-Benutzernamen, dem Server-Benutzernamen sowie dem Terminaltyp und der Geschwindigkeit. Genauer gesagt: ...
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 sich user@host
gut auf die etablierte Syntax für z. B. E-Mail-Übertragung abbilden (vergleichen Sie eine SMTP-Adresse von user@host
, bei der es sich host
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).
-p
Switch verwenden, um einen alternativen Port zu übertragen.