Lệnh Linux / Unix: sshd

Tên

sshd - OpenSSH SSH daemon

Tóm tắc

sshd [- deiqtD46 ] [- bit b ] [- f config_file ] [- g login_grace_time ] [- h host_key_file ] [- k key_gen_time ] [- o tùy chọn ] [- p port ] [- u len ]

Sự miêu tả

sshd (SSH Daemon) là chương trình daemon cho ssh (1). Các chương trình này cùng nhau thay thế rlogin rsh , và cung cấp thông tin liên lạc được mã hóa an toàn giữa hai máy chủ không đáng tin cậy trên một mạng không an toàn. Các chương trình được thiết kế để dễ cài đặt và sử dụng nhất có thể.

sshd là daemon lắng nghe các kết nối từ máy khách. Nó thường được khởi động lúc khởi động từ / etc / rc Nó dồn một daemon mới cho mỗi kết nối đến. Các daemon chia tay xử lý trao đổi khóa, mã hóa, xác thực, thực thi lệnh và trao đổi dữ liệu. Việc triển khai sshd này hỗ trợ cả giao thức SSH phiên bản 1 và 2 cùng một lúc.

Giao thức SSH phiên bản 1

Mỗi máy chủ có khóa RSA dành riêng cho máy chủ lưu trữ (thường là 1024 bit) được sử dụng để nhận dạng máy chủ lưu trữ. Ngoài ra, khi daemon bắt đầu, nó tạo ra một khóa RSA máy chủ (thường là 768 bit). Khóa này thường được tái tạo mỗi giờ nếu nó đã được sử dụng và không bao giờ được lưu trữ trên đĩa.

Bất cứ khi nào một khách hàng kết nối daemon đáp ứng với các máy chủ công cộng và các khóa máy chủ của nó. Máy khách so sánh khóa máy chủ RSA với cơ sở dữ liệu riêng của nó để xác minh rằng nó không thay đổi. Khách hàng sau đó tạo ra một số ngẫu nhiên 256-bit. Nó mã hóa số ngẫu nhiên này bằng cả khóa máy chủ và khóa máy chủ và gửi số được mã hóa đến máy chủ. Cả hai bên sau đó sử dụng số ngẫu nhiên này làm khóa phiên được sử dụng để mã hóa tất cả các liên lạc khác trong phiên. Phần còn lại của phiên được mã hóa bằng mật mã thông thường, hiện tại là Blowfish hoặc 3DES, với 3DES được sử dụng theo mặc định. Máy khách chọn thuật toán mã hóa để sử dụng từ các thuật toán được cung cấp bởi máy chủ.

Tiếp theo, máy chủ và máy khách sẽ nhập một hộp thoại xác thực. Máy khách cố xác thực chính nó bằng cách sử dụng xác thực .rhosts, xác thực .rhosts kết hợp với xác thực máy chủ RSA, xác thực phản hồi RSA hoặc xác thực dựa trên mật khẩu .

Xác thực Rhosts thường bị vô hiệu hóa vì nó về cơ bản không an toàn, nhưng có thể được kích hoạt trong tệp cấu hình máy chủ nếu muốn. Bảo mật hệ thống không được cải thiện trừ khi rshd rlogind và rexecd bị tắt (do đó hoàn toàn vô hiệu hóa rlogin và rsh vào máy).

Giao thức SSH phiên bản 2

Phiên bản 2 hoạt động tương tự: Mỗi máy chủ có một khóa máy chủ cụ thể (RSA hoặc DSA) được sử dụng để xác định máy chủ lưu trữ. Tuy nhiên, khi daemon bắt đầu, nó không tạo ra một khóa máy chủ. Chuyển tiếp bảo mật được cung cấp thông qua một thỏa thuận khóa Diffie-Hellman. Thỏa thuận khóa này dẫn đến khóa phiên được chia sẻ.

Phần còn lại của phiên được mã hóa bằng mật mã đối xứng, hiện tại là 128 bit AES, Blowfish, 3DES, CAST128, Arcfour, 192 bit AES hoặc 256 bit AES. Máy khách chọn thuật toán mã hóa để sử dụng từ các thuật toán được cung cấp bởi máy chủ. Ngoài ra, tính toàn vẹn phiên được cung cấp thông qua mã xác thực thông báo mã hóa (hmac-sha1 hoặc hmac-md5).

Giao thức phiên bản 2 cung cấp một khóa công khai dựa trên người dùng (PubkeyAuthentication) hoặc phương thức xác thực máy chủ lưu trữ (HostbasedAuthentication), xác thực mật khẩu thông thường và các phương thức dựa trên phản hồi thách thức.

Thực thi lệnh và chuyển tiếp dữ liệu

Nếu khách hàng xác thực thành công, hộp thoại để chuẩn bị phiên được nhập. Tại thời điểm này, khách hàng có thể yêu cầu những thứ như phân bổ kết nối X11 giả, chuyển tiếp, chuyển tiếp kết nối TCP / IP hoặc chuyển tiếp kết nối đại lý xác thực qua kênh bảo mật.

Cuối cùng, client yêu cầu một shell hoặc thực hiện một lệnh. Các bên sau đó vào chế độ phiên. Trong chế độ này, hai bên có thể gửi dữ liệu bất kỳ lúc nào và dữ liệu đó được chuyển tiếp đến / từ trình bao hoặc lệnh ở phía máy chủ và thiết bị đầu cuối người dùng ở phía máy khách.

Khi chương trình người dùng chấm dứt và tất cả các chuyển tiếp X11 và các kết nối khác đã bị đóng, máy chủ sẽ gửi trạng thái thoát lệnh đến máy khách và cả hai bên thoát.

sshd có thể được cấu hình bằng cách sử dụng tùy chọn dòng lệnh hoặc tập tin cấu hình. Các tùy chọn ghi đè tùy chọn dòng lệnh được chỉ định trong tệp cấu hình.

sshd rereads tập tin cấu hình của nó khi nó nhận được một tín hiệu gác máy, SIGHUP bằng cách thực hiện chính nó với tên nó đã được bắt đầu như, tức là, / usr / sbin / sshd

Các tùy chọn như sau:

bits

Chỉ định số bit trong khóa máy chủ phiên bản giao thức tạm thời 1 (mặc định là 768).

-d

Chế độ kiểm tra sửa lỗi. Máy chủ gửi đầu ra gỡ lỗi chi tiết tới nhật ký hệ thống và không đặt chính nó trong nền. Máy chủ cũng sẽ không hoạt động và sẽ chỉ xử lý một kết nối. Tùy chọn này chỉ dành cho gỡ lỗi cho máy chủ. Tùy chọn nhiều -d tăng mức gỡ lỗi. Tối đa là 3.

-e

Khi tùy chọn này được chỉ định, sshd sẽ gửi đầu ra tới lỗi tiêu chuẩn thay vì nhật ký hệ thống.

-f configuration_file

Chỉ định tên của tệp cấu hình. Mặc định là / etc / ssh / sshd_config sshd từ chối khởi động nếu không có tập tin cấu hình.

-g login_grace_time

Cung cấp thời gian gia hạn cho khách hàng để xác thực bản thân (mặc định 120 giây). Nếu máy khách không xác thực được người dùng trong vòng vài giây này, máy chủ sẽ ngắt kết nối và thoát. Giá trị bằng 0 cho biết không có giới hạn.

-h host_key_file

Chỉ định một tệp mà từ đó một khóa máy chủ được đọc. Tùy chọn này phải được đưa ra nếu sshd không được chạy dưới dạng root (vì các tệp khóa máy chủ bình thường thường không thể đọc được bởi bất kỳ ai trừ gốc). Mặc định là / etc / ssh / ssh_host_key cho giao thức phiên bản 1 và / etc / ssh / ssh_host_rsa_key và / etc / ssh / ssh_host_dsa_key cho phiên bản giao thức 2. Có thể có nhiều tệp khóa máy chủ cho các phiên bản giao thức khác nhau và khóa máy chủ thuật toán.

-tôi

Chỉ định rằng sshd đang được chạy từ inetd. sshd thường không chạy từ inetd vì nó cần tạo khóa máy chủ trước khi nó có thể đáp ứng với máy khách và điều này có thể mất hàng chục giây. Khách hàng sẽ phải đợi quá lâu nếu khóa được tái tạo mỗi lần. Tuy nhiên, với kích thước khóa nhỏ (ví dụ: 512) sử dụng sshd từ inetd có thể khả thi.

-k key_gen_time

Chỉ định tần suất khóa máy chủ 1 phiên bản giao thức tạm thời được tạo lại (mặc định 3600 giây hoặc một giờ). Động lực cho việc tái sinh chìa khóa khá thường xuyên là chìa khóa không được lưu trữ ở bất cứ đâu, và sau khoảng một giờ, nó trở thành không thể khôi phục chìa khóa để giải mã các liên lạc bị chặn ngay cả khi máy bị nứt hoặc bị bắt giữ. Giá trị bằng 0 cho biết khóa sẽ không bao giờ được tạo lại.

tùy chọn -o

Có thể được sử dụng để cung cấp các tùy chọn ở định dạng được sử dụng trong tệp cấu hình. Điều này rất hữu ích cho việc xác định các tùy chọn mà không có cờ dòng lệnh riêng biệt.

-p cổng

Chỉ định cổng mà máy chủ lắng nghe các kết nối (mặc định là 22). Nhiều tùy chọn cổng được cho phép. Các cổng được chỉ định trong tệp cấu hình bị bỏ qua khi một cổng dòng lệnh được chỉ định.

-q

Chế độ yên lặng. Không có gì được gửi tới nhật ký hệ thống. Thông thường, việc bắt đầu, xác thực và chấm dứt mỗi kết nối được ghi lại.

-t

Chê độ kiểm tra. Chỉ kiểm tra tính hợp lệ của tập tin cấu hình và độ chính xác của các phím. Điều này rất hữu ích cho việc cập nhật sshd đáng tin cậy vì các tùy chọn cấu hình có thể thay đổi.

-u len

Tùy chọn này được sử dụng để xác định kích cỡ của trường trong cấu trúc utmp chứa tên máy chủ từ xa. Nếu tên máy chủ lưu trữ được giải quyết dài hơn len thì giá trị thập phân rải rác sẽ được sử dụng thay thế. Điều này cho phép các máy chủ có tên máy chủ lưu trữ rất dài tràn trường này để vẫn được xác định duy nhất. Chỉ định - u0 cho biết rằng chỉ các địa chỉ thập phân được rải rác nên được đưa vào tệp utmp. - u0 cũng được sử dụng để ngăn chặn sshd thực hiện các yêu cầu DNS trừ khi cơ chế xác thực hoặc cấu hình yêu cầu nó. Cơ chế xác thực có thể yêu cầu DNS bao gồm RhostsAuthentication RhostsRSAAuthentication HostbasedAuthentication và sử dụng tùy chọn from = pattern-list trong tệp khóa. Các tùy chọn cấu hình yêu cầu DNS bao gồm sử dụng mẫu USER @ HOST trong AllowUsers hoặc DenyUsers

-D

Khi tùy chọn này được chỉ định sshd sẽ không tách rời và không trở thành một daemon. Điều này cho phép dễ dàng theo dõi sshd

-4

Buộc sshd chỉ sử dụng địa chỉ IPv4.

-6

Buộc sshd chỉ sử dụng địa chỉ IPv6.

Tập tin cấu hình

sshd đọc dữ liệu cấu hình từ / etc / ssh / sshd_config (hoặc tệp được chỉ định bằng - f trên dòng lệnh). Các tùy chọn định dạng tệp và cấu hình được mô tả trong sshd_config5.

Quy trình đăng nhập

Khi người dùng đăng nhập thành công, sshd sẽ làm như sau:

  1. Nếu thông tin đăng nhập trên tty và không có lệnh nào được chỉ định, hãy in lần đăng nhập cuối cùng và / etc / motd (trừ khi được ngăn trong tệp cấu hình hoặc $ HOME / .hushlogin xem phần Sx FILES).
  2. Nếu thông tin đăng nhập trên tty, hãy ghi lại thời gian đăng nhập.
  3. Kiểm tra / etc / nologin nếu nó tồn tại, in nội dung và thoát (trừ khi root).
  4. Các thay đổi để chạy với các đặc quyền người dùng thông thường.
  5. Thiết lập môi trường cơ bản.
  6. Đọc $ HOME / .ssh / môi trường nếu nó tồn tại và người dùng được phép thay đổi môi trường của họ. Xem tùy chọn PermitUserEnvironment trong sshd_config5.
  7. Thay đổi thư mục chính của người dùng.
  8. Nếu tồn tại $ HOME / .ssh / rc, hãy chạy nó; nếu có / etc / ssh / sshrc tồn tại, hãy chạy nó; nếu không thì chạy xauth. Các tập tin `'rc' 'được cung cấp giao thức xác thực X11 và cookie trong đầu vào tiêu chuẩn.
  9. Chạy trình bao hoặc lệnh của người dùng.

Định dạng tệp được ủy quyền_Keys

$ HOME / .ssh / authorized_keys là tệp mặc định liệt kê các khóa công khai được phép xác thực RSA trong phiên bản giao thức 1 và để xác thực khoá công khai (PubkeyAuthentication) trong phiên bản giao thức 2. AuthorizedKeysFile có thể được sử dụng để chỉ định tệp thay thế.

Mỗi dòng của tệp chứa một khóa (các dòng trống và các dòng bắt đầu bằng một `# 'bị bỏ qua dưới dạng nhận xét). Mỗi khóa công khai RSA bao gồm các trường sau, được phân tách bằng dấu cách: tùy chọn, bit, số mũ, mô đun, nhận xét. Mỗi khóa công khai phiên bản giao thức 2 bao gồm: tùy chọn, keytype, khóa được mã hóa base64, nhận xét. Trường tùy chọn là tùy chọn; sự hiện diện của nó được xác định bởi vì dòng bắt đầu với một số hay không (trường tùy chọn không bao giờ bắt đầu bằng một số). Các trường bit, số mũ, mô đun và nhận xét cung cấp khóa RSA cho giao thức phiên bản 1; lĩnh vực bình luận không được sử dụng cho bất cứ điều gì (nhưng có thể thuận tiện cho người sử dụng để xác định khóa). Đối với phiên bản giao thức 2, keytype là `` ssh-dss '' hoặc `` ssh-rsa ''

Lưu ý rằng các dòng trong tệp này thường dài vài trăm byte (do kích thước của mã hóa khóa công khai). Bạn không muốn nhập chúng vào; thay vào đó, hãy sao chép tệp identity.pub id_dsa.pub hoặc tệp id_rsa.pub và chỉnh sửa tệp đó.

sshd thực thi kích thước mô đun khóa RSA tối thiểu cho giao thức 1 và giao thức 2 khóa của 768 bit.

Các tùy chọn (nếu có) bao gồm các thông số tùy chọn được phân tách bằng dấu phẩy. Không có khoảng trống nào được phép, ngoại trừ trong dấu ngoặc kép. Các thông số kỹ thuật tùy chọn sau đây được hỗ trợ (lưu ý rằng các từ khoá tùy chọn không phân biệt chữ hoa chữ thường):

từ = mẫu-danh sách

Chỉ định rằng ngoài xác thực khoá công khai, tên chuẩn của máy chủ từ xa phải có trong danh sách mẫu được phân cách bằng dấu phẩy (`* 'và`?' Đóng vai trò là ký tự đại diện). Danh sách này cũng có thể chứa các mẫu bị phủ định bằng cách thêm tiền tố cho chúng bằng `! ' ; nếu tên máy chủ hợp chuẩn khớp với mẫu phủ định, khóa không được chấp nhận. Mục đích của tùy chọn này là tùy chọn tăng cường bảo mật: tự xác thực khoá công khai không tin tưởng vào mạng hoặc máy chủ định danh hoặc bất kỳ thứ gì (nhưng khóa); Tuy nhiên, nếu ai đó bằng cách nào đó đánh cắp chìa khóa, chìa khóa cho phép một kẻ xâm nhập để đăng nhập từ bất cứ nơi nào trên thế giới. Tùy chọn bổ sung này làm cho việc sử dụng khóa bị đánh cắp trở nên khó khăn hơn (máy chủ định danh và / hoặc bộ định tuyến sẽ phải bị xâm phạm ngoài khóa).

lệnh = lệnh

Chỉ định rằng lệnh được thực hiện bất cứ khi nào phím này được sử dụng để xác thực. Lệnh được cung cấp bởi người dùng (nếu có) bị bỏ qua. Lệnh được chạy trên một pty nếu khách hàng yêu cầu một pty; nếu không nó được chạy mà không có một tty. Nếu yêu cầu kênh sạch 8 bit, bạn không được yêu cầu pty hoặc phải chỉ định báo giá A -pty A có thể được bao gồm trong lệnh bằng cách trích dẫn nó bằng dấu gạch chéo ngược. Tùy chọn này có thể hữu ích để hạn chế các khóa công khai nhất định chỉ thực hiện một thao tác cụ thể. Một ví dụ có thể là một chìa khóa cho phép sao lưu từ xa nhưng không có gì khác. Lưu ý rằng máy khách có thể chỉ định chuyển tiếp TCP / IP và / hoặc X11 trừ khi chúng bị cấm một cách rõ ràng. Lưu ý rằng tùy chọn này áp dụng cho thực thi shell, command hoặc subystem.

môi trường = NAME = giá trị

Chỉ định rằng chuỗi sẽ được thêm vào môi trường khi đăng nhập bằng cách sử dụng phím này. Các biến môi trường được thiết lập theo cách này sẽ ghi đè lên các giá trị môi trường mặc định khác. Nhiều tùy chọn thuộc loại này được cho phép. Xử lý môi trường được tắt theo mặc định và được điều khiển thông qua tùy chọn PermitUserEnvironment . Tùy chọn này sẽ tự động bị tắt nếu UseLogin được bật.

không chuyển tiếp cổng

Cấm chuyển tiếp TCP / IP khi khóa này được sử dụng để xác thực. Mọi yêu cầu chuyển tiếp cổng của ứng dụng khách sẽ trả về lỗi. Điều này có thể được sử dụng, ví dụ, trong kết nối với các tùy chọn lệnh .

chuyển tiếp no-X11

Cấm chuyển tiếp X11 khi khóa này được sử dụng để xác thực. Mọi yêu cầu chuyển tiếp X11 của máy khách sẽ trả về lỗi.

không chuyển tiếp đại lý

Ngăn chặn chuyển tiếp tác nhân xác thực khi khóa này được sử dụng để xác thực.

no-pty

Ngăn chặn phân bổ tty (một yêu cầu để phân bổ một pty sẽ thất bại).

allowopen = host: cổng

Hạn chế chuyển tiếp cổng `` ssh -L '' cục bộ sao cho nó chỉ có thể kết nối với máy chủ và cổng được chỉ định. Địa chỉ IPv6 có thể được chỉ định bằng cú pháp thay thế: máy chủ / cổng Nhiều tùy chọn cho phép có thể được áp dụng cách nhau bằng dấu phẩy. Không có kết hợp mẫu được thực hiện trên tên máy chủ được chỉ định, chúng phải là tên miền hoặc địa chỉ theo nghĩa đen.

Ví dụ

1024 33 12121 ... 312314325 ylo@foo.bar

từ = "*. niksula.hut.fi,! pc.niksula.hut.fi" 1024 35 23 ... 2334 ylo @ niksula

command = "dump / home", no-pty, no-port-forwarding 1024 33 23 ... 2323 backup.hut.fi

allowopen = "10.2.1.55:80", allowopen = "10.2.1.56:25" 1024 33 23 ... 2323

Định dạng tệp Ssh_Known_Hosts

Các tệp / etc / ssh / ssh_known_hosts và $ HOME / .ssh / known_hosts chứa các khóa công khai của máy chủ lưu trữ cho tất cả các máy chủ đã biết. Tập tin toàn cầu cần được chuẩn bị bởi người quản trị (tùy chọn) và tập tin cho mỗi người dùng được duy trì tự động: bất cứ khi nào người dùng kết nối từ một máy chủ không xác định, khóa của nó sẽ được thêm vào tập tin cho mỗi người dùng.

Mỗi dòng trong các tệp này chứa các trường sau: tên máy chủ, bit, số mũ, mô đun, nhận xét. Các trường được phân cách bằng dấu cách.

Tên máy chủ là danh sách mẫu được phân cách bằng dấu phẩy ('*' và '?' Hoạt động như các ký tự đại diện); mỗi mẫu, lần lượt, được so khớp với tên máy chủ hợp quy (khi xác thực một máy khách) hoặc chống lại tên do người dùng cung cấp (khi xác thực một máy chủ). Một mẫu có thể được bắt đầu bởi `! ' để chỉ ra phủ định: nếu tên máy chủ khớp với mẫu phủ định, nó không được chấp nhận (theo dòng đó) ngay cả khi nó khớp với một mẫu khác trên dòng.

Các bit, số mũ và mô-đun được lấy trực tiếp từ khóa máy chủ RSA; chúng có thể lấy được, ví dụ, từ /etc/ssh/ssh_host_key.pub Trường chú thích tùy chọn tiếp tục đến cuối dòng và không được sử dụng.

Các dòng bắt đầu bằng `# 'và các dòng trống sẽ bị bỏ qua dưới dạng nhận xét.

Khi thực hiện xác thực máy chủ, xác thực được chấp nhận nếu bất kỳ dòng khớp nào có khóa thích hợp. Do đó, cho phép (nhưng không được khuyến nghị) có nhiều dòng hoặc các khóa máy chủ khác nhau cho cùng một tên. Điều này chắc chắn sẽ xảy ra khi các hình thức ngắn của tên máy chủ lưu trữ từ các tên miền khác nhau được đưa vào tệp. Có thể các tệp chứa thông tin xung đột; xác thực được chấp nhận nếu thông tin hợp lệ có thể được tìm thấy từ một trong hai tập tin.

Lưu ý rằng các dòng trong các tệp này thường dài hàng trăm ký tự và bạn chắc chắn không muốn nhập các khóa máy chủ bằng tay. Thay vào đó, hãy tạo chúng bằng một tập lệnh hoặc bằng cách dùng /etc/ssh/ssh_host_key.pub và thêm tên máy chủ ở phía trước.

Ví dụ

closenet, ..., 130.233.208.41 1024 37 159 ... 93 closenet.hut.fi cvs.openbsd.org, 199.185.137.3 ssh-rsa AAAA1234 ..... =

Xem thêm

scp (1), sftp (1), ssh (1), ssh-add1, ssh-agent1, ssh-keygen1, login.conf5, moduli (5), sshd_config5, sftp-server8

T. Ylonen T. Kivinen M. Saarinen T. Rinne S. Lehtinen “Kiến trúc giao thức SSH” draft-ietf-secsh-architecture-12.txt Tháng 1 năm 2002 công việc đang tiến hành

M. Friedl N. Provos WA Simpson "Trao đổi nhóm Diffie-Hellman cho Giao thức tầng vận tải SSH" draft-ietf-secsh-dh-group-exchange-02.txt Tháng 1 năm 2002 công việc đang tiến hành

Quan trọng: Sử dụng lệnh man ( % man ) để xem cách một lệnh được sử dụng trên máy tính cụ thể của bạn.