我最初将其发布为评论,但会充实一点作为答案。
OpenSSH包含几个实用程序,其中最著名的是ssh
和scp
。虽然ssh
只会连接到远程计算机(并且可能在该远程计算机上执行命令),但OpenSSH的其他部分(例如,scp
语法)略有不同。由于全部都是OpenSSH套件的一部分,因此它们很可能共享许多代码。
使用scp
,您可以将三元组形式的远程文件指定为user@host:remotefilename
,其中remotefilename
可以是相对路径或绝对路径。
如果允许主机部分包含在表单中host:port
,则可能会造成歧义:在标准端口上连接时确实jdoe@host.example.com:2222
引用~jdoe/2222
host.example.com,或者在标准端口上根本不引用文件(或更糟的是~jdoe
)通过端口2222连接host.example.com吗?
您提供的URI语法在表达方式上受到了更大的限制(不允许使用文件名规范),更重要的是,除非实际的主机名包含a :
(我认为这样),否则永远不会有歧义。甚至可以在DNS中使用,并且肯定不是很普遍,而全数字文件名并不是那么普遍)。
最初开发SSH时,它是作为更安全的直接替代早期RSH / rlogin工具套件而开发的。我不知道它在1990年代初的命令行语法是什么(描述rlogin的RFC是1991年12月的RFC 1282,早于您引用的文档大约15年),但这似乎并不合理。猜测它使用了非常相似的语法,因为用户名是在rlogin协议中专门传输的。引用RFC 1282:
建立连接后,客户端将四个以空值结尾的字符串发送到服务器。第一个是空字符串(即,它仅由一个零字节组成),后跟三个非空字符串:客户端用户名,服务器用户名以及终端类型和速度。更明确地说:...
可以通过各种系统工具获取本地用户名,但是必须以某种方式显式指定远程用户名。除了@
通常被发音为“ at”之外,因此自然是一个不错的选择,它user@host
可以很好地映射到已建立的语法,例如,电子邮件传输(比较的SMTP地址user@host
,其中host
可能是实际主机或带有MX记录指向的DNS名称(而不是新主机),因此这可能是一个简单的选择。
还应注意 Stephane Chazelas在评论中指出的内容:您所引用的文档不是RFC,它是目前已有七年历史的草案,通过Google的快速搜索来确认,看来该草案从未真正起步。 。这种情况一直在发生;提出了一些建议,但并没有获得将其实际制作为RFC的支持(甚至很多,很多 RFC是非标准的)。
-p
交换机来传送备用端口。