RFC:
将SSH URI表示为:
ssh://[<user>[;fingerprint=<host-key fingerprint>]@]<host>[:<port>]
是否有任何已知原因导致OpenSSH ssh命令不使用hostname选项遵循此标准?它不接受冒号后面的端口。
我期望工作的URI示例:
$ ssh user@host:2222
ssh: Could not resolve hostname host:2222: Name or service not known
RFC:
将SSH URI表示为:
ssh://[<user>[;fingerprint=<host-key fingerprint>]@]<host>[:<port>]
是否有任何已知原因导致OpenSSH ssh命令不使用hostname选项遵循此标准?它不接受冒号后面的端口。
我期望工作的URI示例:
$ ssh user@host:2222
ssh: Could not resolve hostname host:2222: Name or service not known
Answers:
我最初将其发布为评论,但会充实一点作为答案。
OpenSSH包含几个实用程序,其中最著名的是ssh和scp。虽然ssh只会连接到远程计算机(并且可能在该远程计算机上执行命令),但OpenSSH的其他部分(例如,scp语法)略有不同。由于全部都是OpenSSH套件的一部分,因此它们很可能共享许多代码。
使用scp,您可以将三元组形式的远程文件指定为user@host:remotefilename,其中remotefilename可以是相对路径或绝对路径。
如果允许主机部分包含在表单中host:port,则可能会造成歧义:在标准端口上连接时确实jdoe@host.example.com:2222引用~jdoe/2222host.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交换机来传送备用端口。