Ban đầu tôi đã đăng bài này như một bình luận, nhưng sẽ đưa ra một chút như một câu trả lời.
OpenSSH chứa một số tiện ích, trong số đáng chú ý nhất là ssh
và scp
. Mặc dù ssh
sẽ chỉ kết nối với một máy tính từ xa (và có thể thực thi một lệnh trên máy tính từ xa đó), các phần khác của OpenSSH như scp
có một cú pháp hơi khác. Do tất cả là một phần của bộ OpenSSH, những thứ này có thể chia sẻ rất nhiều mã.
Với scp
, bạn chỉ định một tệp từ xa trên biểu mẫu bộ ba user@host:remotefilename
, trong đó remotefilename
có thể là đường dẫn tương đối hoặc tuyệt đối.
Nếu phần máy chủ được cho phép ở trên biểu mẫuhost:port
, điều này sẽ tạo ra sự mơ hồ tiềm ẩn: có jdoe@host.example.com:2222
đề cập đến ~jdoe/2222
host.example.com khi kết nối trên cổng tiêu chuẩn hoặc không đề cập đến việc không có tệp nào (hoặc tệ hơn ~jdoe
) host.example.com khi kết nối qua cổng 2222?
Cú pháp URI mà bạn trình bày bị hạn chế hơn về những gì nó có thể diễn đạt (nó không cho phép đặc tả tên tệp) và quan trọng hơn, không bao giờ có thể có sự mơ hồ trừ khi tên máy chủ thực tế bao gồm một :
(mà tôi không nghĩ thậm chí có thể có trong DNS và chắc chắn không được thực hiện phổ biến, trong khi tên tệp tất cả số không phải là bất thường).
Khi SSH ban đầu được phát triển , nó được phát triển như một sự thay thế thả xuống an toàn hơn cho bộ công cụ RSH / rlogin trước đó. Tôi không biết cú pháp dòng lệnh nào đã có từ đầu những năm 1990 (RFC mô tả rlogin là RFC 1282 từ tháng 12 năm 1991 , dự đoán tài liệu bạn trích dẫn khoảng 15 năm), nhưng có vẻ không hợp lý đoán rằng nó đã sử dụng một cú pháp rất giống nhau vì tên người dùng được truyền đặc biệt trong giao thức rlogin. Trích dẫn RFC 1282:
Khi thiết lập kết nối, máy khách sẽ gửi bốn chuỗi kết thúc null đến máy chủ. Đầu tiên là một chuỗi rỗng (nghĩa là nó chỉ bao gồm một byte 0 đơn), theo sau là ba chuỗi không null: tên người dùng máy khách, tên người dùng máy chủ , và loại tốc độ và thiết bị đầu cuối. Nói rõ hơn: ...
Tên người dùng cục bộ có thể được lấy thông qua các cơ sở hệ thống khác nhau, nhưng tên người dùng từ xa phải được chỉ định rõ ràng bằng cách nào đó . Ngoài việc @
thường được phát âm là "at" và do đó là một lựa chọn khá tự nhiên để bắt đầu, user@host
ánh xạ tốt đến cú pháp được thiết lập cho ví dụ như gửi email (so sánh địa chỉ SMTP của user@host
, nơi host
có thể là máy chủ thực tế hoặc tên DNS với bản ghi MX cho một máy chủ thực tế), vì vậy nó có thể là một lựa chọn dễ dàng hơn là tạo ra một cái gì đó mới.
Cũng đáng chú ý những gì Stephane Chazelas đã chỉ ra trong một bình luận : tài liệu mà bạn đề cập không phải là RFC, đây là một bản nháp bảy năm tuổi, được đánh giá bởi một tìm kiếm nhanh của Google để xác nhận, dường như chưa bao giờ được đưa ra khỏi mặt đất . Điều đó xảy ra tất cả các thời gian; một cái gì đó được đề xuất, nhưng không thu hút được sự hỗ trợ để thực sự biến nó thành một RFC (và thậm chí nhiều, nhiều RFC là không chuẩn).
-p
tắc để truyền tải một cổng thay thế.