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にはいくつかのユーティリティが含まれており、その中で最も有名なのsshscp。リモートシステムにのみ接続し、そのリモートシステムでコマンドを実行することもできますが、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つの文字列をサーバーに送信します。 1つ目は空の文字列(つまり0バイトのみで構成されています)で、その後には空でない3つの文字列(クライアントユーザー名、サーバーのユーザー名、端子の種類と速度も同様です。具体的には:...

ローカルユーザー名はさまざまなシステム機能で取得できますが、リモートユーザー名は明示的に指定する必要があります。何とか@多くの場合「at」と発音されるため、非常に自然な選択であるだけでなく、電子メール送信(実際のホストである可能性がある、またはDNS名を指すMXレコードを含むuser@hostSMTPアドレスの比較)などの確立された構文と実際のホストにもよくマッピングされます。したがって、これは新しいものを作成するよりも単純なオプションです。user@hosthost

また注目に値する記事で言及されているStephane Chazelasコメント:あなたが言及した文書はRFCではなく現在7年のドラフトであり、迅速なGoogle検索で確認されたところによると、まだリリースされていないようです。これは常に起こります。いくつかの提案が提示されていますが、実際にRFCで作成できるサポートは得られませんでした。たくさんRFCは非標準です。

おすすめ記事