Por que o comando ssh não segue o RFC no URI?

9

O RFC:

apresenta o URI SSH como:

ssh://[<user>[;fingerprint=<host-key fingerprint>]@]<host>[:<port>]

Existem razões conhecidas pelas quais o comando OpenSSH ssh não segue esse padrão com a opção hostname? Não aceita uma porta após dois pontos.

Exemplo de um URI que eu esperava trabalhar:

$ ssh user@host:2222
ssh: Could not resolve hostname host:2222: Name or service not known
Tomasz Wasiluk
fonte
Eu acho que @ MichaelKjörling está correto. Os dois pontos são o limite para onde o nome do host para e o caminho começa nesse host. Você precisa usar o -pswitch para transmitir uma porta alternativa.
Slm
6
Isso não é uma RFC, que é um projecto que não tenha sido seguido através desde 2006.
Stéphane Chazelas
Concordo que rfc3986 teria sido mais apropriado para citar.
Tomasz Wasiluk

Respostas:

5

sshantecede o formato mais geral de URI ( 1998 ) por vários anos (1995 IIRC).

Anthon
fonte
Então você está dizendo que o rascunho da RFC 1738 publicado em dezembro de 1994 não poderia ter influenciado o desenvolvimento do OpenSSH? O OpenSSH apareceu pela primeira vez no OpenBSD 2.6 e a primeira versão portátil foi feita em outubro de 1999, seguindo a Wikipedia . A menos que tivesse que ser compatível com as ferramentas ssh.com?
Tomasz Wasiluk
O RFC 1738 é para URLs e, em minha lembrança, não é um formato tão genérico e, posteriormente, generalizado em URIs. O openssh é muito mais tarde que o ssh, não me lembro de ter feito a transição, então há uma boa chance de que eles sejam compatíveis com a linha de comando em grande parte.
Anthon
14

Originalmente, eu postei isso como um comentário, mas o detalharei um pouco como resposta.

O OpenSSH contém vários utilitários, dentre os mais notáveis, são sshe scp. Embora sshapenas se conecte a um computador remoto (e possivelmente execute um comando nesse computador remoto), outras partes do OpenSSH, como scpuma sintaxe um pouco diferente. Em virtude de todos serem parte do pacote OpenSSH, eles provavelmente compartilham muito código.

Com scp, você especifica um arquivo remoto em um formulário triplo como user@host:remotefilename, onde remotefilenamepode ser um caminho relativo ou absoluto.

Se a parte do host tiver permissão para estar no formuláriohost:port , isso criaria uma possível ambiguidade: se [email protected]:2222refere a ~jdoe/2222host.example.com ao conectar-se à porta padrão ou se refere a nenhum arquivo (ou pior ~jdoe) em host.example.com ao conectar pela porta 2222?

A sintaxe do URI que você apresenta é mais limitada no que pode expressar (não permite uma especificação de nome de arquivo) e, mais importante ainda, nunca pode haver ambiguidade, a menos que o nome do host real inclua um :(o que eu acho que não é até possível no DNS, e certamente não é comumente feito, enquanto nomes de arquivos numéricos não são tão incomuns).

Quando o SSH foi desenvolvido originalmente , ele foi desenvolvido como um substituto mais seguro para o conjunto anterior de ferramentas RSH / rlogin. Não sei qual era a sintaxe da linha de comando no início dos anos 90 (a RFC que descreve o rlogin é a RFC 1282 de dezembro de 1991 , anterior ao documento que você cita em cerca de 15 anos), mas não parece irracional. acho que ele usou uma sintaxe muito semelhante porque o nome do usuário foi transmitido especialmente no protocolo rlogin. Citando a RFC 1282:

No estabelecimento da conexão, o cliente envia quatro seqüências terminadas em nulo para o servidor. A primeira é uma cadeia vazia (ou seja, consiste apenas em um único byte zero), seguida por três cadeias não nulas: o nome de usuário do cliente, o nome de usuário do servidor e o tipo e velocidade do terminal. Mais explicitamente: ...

O nome de usuário local pode ser obtido através de várias instalações do sistema, mas o nome de usuário remoto deve ser especificado explicitamente de alguma forma . Além de @muitas vezes ser pronunciado "at" e, portanto, ser uma escolha bastante natural, user@hostmapeia bem a sintaxe estabelecida para, por exemplo, a transmissão de email (compare um endereço SMTP de user@host, onde hostpode ser um host real ou um nome DNS com um registro MX apontando para um host real), então provavelmente foi uma escolha fácil, em vez de inventar algo novo.

Também vale a pena observar o que Stephane Chazelas apontou em um comentário : o documento a que você se refere não é uma RFC, é um rascunho de sete anos que, a julgar por uma rápida pesquisa no Google para confirmar, parece nunca ter saído do papel . Isso acontece o tempo todo; algo é proposto, mas não obtém o suporte para transformá-lo em uma RFC (e mesmo muitas, muitas RFCs não são padrões).

um CVn
fonte
1
Acho que minha pergunta deveria ter sido "Por que os utilitários OpenSSH não seguem os padrões gerais de URI?". Embora eu aprecie sua visão, ela não respondeu à minha pergunta.
Tomasz Wasiluk
A perspectiva histórica do +1 é útil para mapear o mar caótico dos padrões #
587
Para expandir o comentário "muitos RFCs não são padrões", isso não poderia estar mais longe da verdade. A própria natureza de uma RFC é uma "solicitação de comentário"; é meramente informativo. Pode ser uma nota, um memorando ou documentação. Um RFC é apenas um memorando publicado; As RFCs são simplesmente também uma das muitas maneiras pelas quais a documentação dos padrões é publicada, embora esse não seja o único objetivo de uma RFC. Um padrão pode ser documentado por meio de uma RFC, mas uma RFC nem sempre é documentação para um padrão específico. Uma banana é uma fruta, mas nem todas as frutas são bananas.
Giratória