SSH 명령이 URI의 RFC를 따르지 않는 이유는 무엇입니까?

SSH 명령이 URI의 RFC를 따르지 않는 이유는 무엇입니까?

RFC:

SSH URI를 다음과 같이 나타냅니다.

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

OpenSSH ssh 명령이 이 표준 호스트 이름 옵션을 따르지 않는 알려진 이유가 있습니까? 콜론 다음에는 포트를 허용하지 않습니다.

작동할 것으로 예상되는 URI의 예:

$ ssh user@host:2222
ssh: Could not resolve hostname host:2222: Name or service not known

답변1

원래는 댓글로 게시했지만 답변으로 구체화하겠습니다.

OpenSSH에는 여러 유틸리티가 포함되어 있으며 그 중 가장 유명한 ssh것은 scp. 원격 시스템에만 연결하고 해당 원격 시스템에서 명령을 실행할 수도 있지만 sshOpenSSH의 다른 부분(예:)은 scp약간 다른 구문을 사용합니다. 둘 다 OpenSSH 제품군의 일부이므로 아마도 많은 코드를 공유할 것입니다.

를 사용하면 scp원격 파일을 상대 경로 또는 절대 경로가 될 수 user@host:remotefilename있는 삼중 경로로 지정할 수 있습니다.remotefilename

호스트 부분이 양식에 표시되도록 허용된 경우host:port, 이는 잠재적인 모호성을 야기합니다. [email protected]:2222표준 포트에 연결할 때 host.example.com이 참조됩니까, 아니면 ~jdoe/2222포트 2222를 통해 연결할 때 Host.example.com의 모든 파일이 참조됩니까(또는 더 나쁜가요)?~jdoe

귀하가 제공하는 URI 구문은 표현할 수 있는 내용이 더 제한적이며(파일 이름 지정을 허용하지 않음) 더 중요한 것은 실제로는 예외입니다.CPU 이름a를 포함합니다 :(DNS에서는 이것이 가능하지 않다고 생각하며 확실히 일반적이지는 않습니다. 반면 모든 숫자로 구성된 파일 이름은 그다지 이상하지 않습니다).

SSH가 처음 개발되었을 때는 이전 RSH/rlogin 도구 모음을 보다 안전한 드롭인 대체 도구로 개발되었습니다. 나는 1990년대 초반의 명령줄 구문이 무엇인지 전혀 모릅니다(rlogin을 설명하는 RFC는RFC 1282(1991년 12월 기준)는 귀하가 인용한 문서보다 약 15년 ​​정도 앞선 것입니다. 그러나 사용자 이름은 rlogin 프로토콜에서만 전송되므로 매우 유사한 구문을 사용하는 것이 무리한 추측처럼 보이지는 않습니다. RFC 1282 인용:

연결이 설정된 후 클라이언트는 null로 끝나는 문자열 4개를 서버에 보냅니다. 첫 번째는 빈 문자열(즉, 0바이트로만 구성됨)이고 그 뒤에는 비어 있지 않은 3개의 문자열(클라이언트 사용자 이름,서버 사용자 이름, 터미널 유형 및 속도도 마찬가지입니다. 더 구체적으로:...

로컬 사용자 이름은 다양한 시스템 기능을 통해 얻을 수 있지만 원격 사용자 이름은 명시적으로 지정해야 합니다.어떻게든. @종종 "at"으로 발음되므로 매우 자연스러운 선택일 뿐만 아니라 이메일 전송(실제 호스트일 수 있거나 DNS 이름을 가리키는 MX 레코드가 있는 user@hostSMTP 주소 비교)과 같은 확립된 구문과 실제 호스트에 잘 매핑됩니다. , 따라서 이는 새로운 것을 만드는 것보다 간단한 옵션일 수 있습니다.user@hosthost

또한 주목할 가치가 있습니다기사에 언급된 Stephane Chazelas논평: 당신이 언급한 문서는 RFC가 아니라 현재 7년 된 초안이며 빠른 Google 검색을 통해 확인된 바에 따르면 아직 출시된 적이 없는 것으로 보입니다. 이런 일은 항상 발생합니다. 몇 가지 제안이 제시되었지만 실제로 RFC로 만들 수 있는 지원은 얻지 못했습니다.많은RFC는 비표준입니다.

답변2

ssh보다 일반적인 URI 형식(1998년) 수년 동안 (1995 IIRC).

관련 정보