Hướng dẫn thiết lập kết nối SSH cho NETCONF Session

Hướng dẫn thiết lập kết nối SSH cho NETCONF Session

Tìm hiểu về các phiên NETCONF qua SSH

Bạn có thể sử dụng giao thức SSH để thiết lập kết nối giữa máy chủ quản lý cấu hình và thiết bị Junos. Máy chủ quản lý cấu hình được dùng để quản lý thiết bị Junos từ xa.

Bạn có thể sử dụng các tùy chọn sau để thiết lập kết nối SSH giữa máy chủ quản lý cấu hình và thiết bị Junos:

  • SSH — Máy chủ quản lý cấu hình khởi tạo một phiên SSH với thiết bị Junos.
  • SSH ra ngoài (Outbound SSH) — Sử dụng tùy chọn này khi máy chủ quản lý không thể khởi tạo kết nối SSH do bị giới hạn bởi mạng (chẳng hạn như tường lửa). Trong trường hợp đó, bạn cấu hình thiết bị Junos để nó tự khởi tạo, thiết lập và duy trì kết nối SSH với một tập hợp máy chủ quản lý cấu hình đã được xác định trước.

Yêu cầu chung đối với các phiên NETCONF qua SSH hoặc SSH ra ngoài

Đối với các phiên NETCONF sử dụng SSH hoặc SSH ra ngoài, bạn cần phải:

  • Cài đặt phần mềm SSH trên máy chủ quản lý cấu hình.
  • Bật dịch vụ NETCONF trên thiết bị Junos.

Xem các phần bên dưới để biết hướng dẫn chi tiết:

Cài đặt phần mềm SSH trên máy chủ quản lý cấu hình

Với kết nối SSH thông thường, máy chủ quản lý cấu hình (CMS) sẽ quản lý phiên SSH với thiết bị Junos.
Với kết nối SSH ra ngoài, thiết bị Junos sẽ thiết lập kết nối SSH đến máy chủ quản lý, sau đó máy chủ quản lý tiếp quản phiên SSH đó.

Để thiết lập kết nối SSH hoặc SSH ra ngoài với thiết bị, máy chủ quản lý cấu hình phải được cài đặt phần mềm SSH cục bộ.

Tham khảo thêm tại các trang sau để tải và cài đặt phần mềm SSH:

Bật dịch vụ NETCONF qua SSH

Để thiết lập phiên NETCONF trên thiết bị Junos, bạn cần bật dịch vụ NETCONF. Bạn có thể cấu hình máy chủ NETCONF để chấp nhận các phiên NETCONF qua các cổng sau:

  • Cổng NETCONF mặc định (830) hoặc một cổng do người dùng định nghĩa
  • Cổng SSH mặc định (22)

Chúng tôi khuyến nghị sử dụng cổng NETCONF mặc định (830) vì thiết bị có thể dễ dàng nhận dạng và lọc lưu lượng NETCONF. Ngoài ra, bạn cũng có thể cấu hình thiết bị để chấp nhận các phiên NETCONF trên một cổng cụ thể thay vì cổng mặc định. Cổng này chỉ chấp nhận các phiên NETCONF qua SSH và sẽ từ chối các phiên SSH thông thường. Nếu bạn cũng bật dịch vụ SSH trên thiết bị, thiết bị sẽ chấp nhận các phiên NETCONF trên cả cổng SSH mặc định và cổng NETCONF đã cấu hình (dù là mặc định hay tùy chỉnh). Để tăng cường bảo mật, bạn có thể cấu hình các chính sách sự kiện (event policy) sử dụng thông tin UI_LOGIN_EVENT để vô hiệu hóa cổng mặc định hoặc giới hạn thêm quyền truy cập dịch vụ NETCONF trên một cổng cụ thể.

Để bật dịch vụ NETCONF qua SSH trên thiết bị Junos:

- Bật dịch vụ NETCONF trên cổng mặc định (830) hoặc một cổng do bạn chỉ định.

  • Để sử dụng cổng NETCONF mặc định (830), hãy thêm dòng cấu hình sau tại cấp cấu hình [edit system services]:

[edit system services]

user@host# set netconf ssh

  • Để sử dụng một cổng cụ thể, hãy cấu hình câu lệnh port với số cổng mong muốn tại cấp cấu hình [edit system services netconf ssh].

[edit system services]

user@host# set netconf ssh port port-number

Số cổng có thể được cấu hình trong khoảng từ 1 đến 65535. Cổng được cấu hình sẽ chỉ chấp nhận các phiên NETCONF-over-SSH và từ chối các phiên SSH thông thường.

**Lưu ý: Mặc dù bạn có thể cấu hình NETCONF-over-SSH trên bất kỳ cổng nào trong khoảng từ 1 đến 65535, bạn nên tránh sử dụng các cổng thường được gán cho các dịch vụ khác. Việc này giúp tránh xung đột tài nguyên có thể xảy ra. Nếu bạn cấu hình một cổng đã được gán cho dịch vụ khác (ví dụ như FTP), và dịch vụ đó đang được bật, thì lệnh commit check sẽ không phát hiện xung đột tài nguyên và không đưa ra cảnh báo nào liên quan.

  • (Tùy chọn) Để cũng cho phép truy cập vào hệ thống con NETCONF SSH bằng cổng SSH mặc định (22), hãy thêm câu lệnh ssh tại cấp cấu hình [edit system services].

[edit system services]

user@host# set ssh

Cấu hình này cho phép truy cập SSH vào thiết bị cho tất cả người dùng và ứng dụng.

**Lưu ý: Trong các phiên bản mà hành vi mặc định là chặn người dùng root sử dụng dịch vụ SSH, bạn cần cấu hình lệnh root-login allow tại cấp cấu hình [edit system services ssh] để cho phép người dùng root mở các phiên NETCONF qua SSH.

  • (Tùy chọn) Cấu hình thiết bị để ngắt kết nối các client NETCONF không phản hồi. Xác định khoảng thời gian chờ (tính bằng giây), sau khoảng thời gian đó nếu không nhận được dữ liệu từ client, tiến trình sshd sẽ yêu cầu phản hồi. Ngoài ra, bạn cũng cần cấu hình ngưỡng số lần client không phản hồi (missed client-alive responses) – nếu vượt quá ngưỡng này, thiết bị sẽ ngắt kết nối client.

[edit system services]

user@host# set netconf ssh client-alive-interval 10

user@host# set netconf ssh client-alive-count-max 10

**Lưu ý: Các câu lệnh được cấu hình tại cấp cấu hình [edit system services netconf ssh] chỉ áp dụng cho các phiên NETCONF kết nối thông qua cổng mặc định (830) hoặc cổng do người dùng chỉ định được cấu hình tại cùng cấp này.

  • Thực hiện commit cấu hình:

[edit]

user@host# commit

  • Lặp lại các bước đã nêu ở trên trên mỗi thiết bị chạy Junos OS nơi mà ứng dụng client thiết lập phiên NETCONF.

Các yêu cầu trước khi thiết lập kết nối SSH cho các phiên NETCONF

Trước khi máy chủ quản lý cấu hình có thể thiết lập kết nối SSH với thiết bị Junos, bạn cần đảm bảo các yêu cầu chung đã được nêu trong phần:

  • Common Prerequisites for NETCONF Sessions over SSH or Outbound SSH
    (Các yêu cầu chung cho các phiên NETCONF qua SSH hoặc SSH ra ngoài)

Ngoài ra, bạn cũng cần đáp ứng các yêu cầu trong các phần sau:

  • Cấu hình tài khoản người dùng cho ứng dụng client trên thiết bị Junos
  • Cấu hình cặp khóa công khai/riêng hoặc mật khẩu cho tài khoản người dùng Junos OS
  • Truy cập khóa hoặc mật khẩu từ ứng dụng client

Cấu hình tài khoản người dùng cho ứng dụng client trên thiết bị Junos

Máy chủ quản lý cấu hình phải đăng nhập vào thiết bị Junos để thiết lập một phiên NETCONF. Vì vậy, máy chủ này cần có tài khoản người dùng trên mỗi thiết bị nơi nó thiết lập phiên NETCONF. Các hướng dẫn sau đây giải thích cách tạo một tài khoản người dùng cục bộ trên thiết bị Junos. Ngoài ra, bạn cũng có thể bỏ qua bước này nếu bạn muốn sử dụng xác thực thông qua RADIUS hoặc TACACS+.

Để tạo tài khoản người dùng cục bộ:

  • Cấu hình câu lệnh user tại cấp cấu hình [edit system login] và chỉ định tên người dùng. Bao gồm câu lệnh class và chỉ định lớp quyền (login class) phù hợp với các quyền mà ứng dụng yêu cầu để thực thi tất cả các hành động cần thiết.

[edit system login]

user@host# set user username class class-name

  • (Tùy chọn), bạn có thể thêm các câu lệnh full-name và uid tại cấp cấu hình [edit system login user username].
  • Thực hiện commit cấu hình để kích hoạt tài khoản người dùng trên thiết bị.

[edit]

user@host# commit

  • Lặp lại các bước đã nêu ở trên trên mỗi thiết bị chạy Junos OS nơi ứng dụng client thiết lập các phiên NETCONF.

Cấu hình cặp khóa công khai/riêng hoặc mật khẩu cho tài khoản người dùng Junos OS

Máy chủ quản lý cấu hình cần có cặp khóa SSH công khai/riêng, một mật khẩu dạng văn bản, hoặc cả hai, trước khi nó có thể xác thực với máy chủ NETCONF. Nếu tài khoản chỉ được sử dụng để kết nối với máy chủ NETCONF qua SSH, thì cặp khóa công khai/riêng là đủ. Nếu tài khoản cũng được sử dụng để truy cập thiết bị theo cách khác (ví dụ đăng nhập qua cổng console), thì tài khoản đó phải có mật khẩu văn bản. Mật khẩu cũng sẽ được sử dụng (máy chủ SSH sẽ yêu cầu) nếu xác thực bằng khóa bị lỗi.

**Lưu ý: Bạn có thể bỏ qua phần này nếu bạn chọn sử dụng xác thực thông qua RADIUS hoặc TACACS+.

Để tạo một mật khẩu dạng văn bản:

  • Bao gồm câu lệnh plain-text-password hoặc encrypted-password tại cấp cấu hình: [edit system login user username authentication]. Để nhập mật khẩu ở dạng văn bản, hãy sử dụng lệnh sau — hệ thống sẽ yêu cầu bạn nhập mật khẩu và sẽ mã hóa nó trước khi lưu lại.

[edit system login user username authentication]

user@host# set plain-text-password

New password: password

Retype new password: password

Để lưu một mật khẩu mà bạn đã tạo trước đó và mã hóa bằng thuật toán Message Digest 5 (MD5) hoặc Secure Hash Algorithm 1 (SHA-1), hãy sử dụng lệnh sau:

[edit system login user username authentication]

user@host# set encrypted-password "password"

  • Xác nhận cấu hình

[edit system login user username authentication]

user@host# commit

  • Lặp lại các bước đã nêu ở trên trên mỗi thiết bị nơi ứng dụng client thiết lập các phiên NETCONF.

Để tạo cặp khóa SSH công khai/riêng, thực hiện các bước sau:

  • Trên máy chủ quản lý cấu hình (nơi ứng dụng client đang chạy), chạy lệnh ssh-keygen trong shell dòng lệnh tiêu chuẩn và cung cấp các tham số phù hợp.

user@nms:~$ ssh-keygen options

 Ví Dụ:

netconf-user@nms:~$ ssh-keygen -t rsa -b 4096

Generating public/private rsa key pair.

Enter file in which to save the key (/home/netconf-user/.ssh/id_rsa):

Created directory '/home/netconf-user/.ssh'.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /home/netconf-user/.ssh/id_rsa

Your public key has been saved in /home/netconf-user/.ssh/id_rsa.pub

...

Để biết thêm thông tin về các tùy chọn của lệnh ssh-keygen, hãy tham khảo trang hướng dẫn (manual page) của lệnh ssh-keygen.

  • Liên kết (gán) khóa công khai với tài khoản đăng nhập trên Junos OS.

[edit system login user username authentication]

user@host# set load-key-file URL

Junos OS sẽ sao chép nội dung của tệp đã chỉ định lên thiết bị đang chạy Junos OS. URL là đường dẫn đến tệp chứa một hoặc nhiều khóa công khai. Lệnh ssh-keygen theo mặc định sẽ lưu mỗi khóa công khai vào một tệp trong thư mục con .ssh nằm trong thư mục chính (home directory) của người dùng; tên tệp phụ thuộc vào phương thức mã hóa và phiên bản SSH được sử dụng. Để biết thêm thông tin về cách chỉ định đường dẫn URL, hãy tham khảo CLI User Guide (Hướng dẫn sử dụng CLI).

**Lưu ý: Ngoài ra, bạn cũng có thể dùng lệnh ssh-rsa tại cấp cấu hình [edit system login user account-name authentication]. Tuy nhiên, chúng tôi khuyến nghị sử dụng lệnh load-key-file vì cách này giúp bạn không cần phải gõ thủ công hoặc sao chép/dán khóa công khai vào dòng lệnh.

Thực hiện commit cấu hình.

[edit]

user@host# commit

  • Lặp lại Bước 2 và Bước 3 trên mỗi thiết bị Junos nơi ứng dụng client thiết lập các phiên NETCONF.

Truy cập Khóa hoặc Mật khẩu từ Ứng dụng Client

Ứng dụng client phải có khả năng truy cập các khóa công khai/riêng hoặc mật khẩu đã cấu hình và cung cấp thông tin này khi máy chủ NETCONF yêu cầu.

Có một số phương pháp để cho phép ứng dụng truy cập khóa hoặc mật khẩu:

  • Nếu sử dụng cặp khóa công khai/riêng, chương trình ssh-agent sẽ chạy trên thiết bị nơi ứng dụng client hoạt động và xử lý khóa riêng.
  • Khi người dùng khởi chạy ứng dụng, ứng dụng sẽ yêu cầu người dùng nhập mật khẩu và lưu tạm thời mật khẩu một cách an toàn.
  • Mật khẩu được lưu ở dạng đã mã hóa tại một vị trí an toàn trên đĩa cứng cục bộ hoặc trong một cơ sở dữ liệu được bảo vệ.

Điều kiện tiên quyết để Thiết lập Kết nối SSH Outbound cho Phiên NETCONF

Để cho phép máy chủ quản lý cấu hình thiết lập kết nối SSH outbound đến máy chủ NETCONF, bạn cần đáp ứng các yêu cầu chung đã đề cập trong:

  • Common Prerequisites for NETCONF Sessions over SSH or Outbound SSH

Cũng như các yêu cầu được trình bày trong các phần sau:

  • Cấu hình thiết bị Junos cho kết nối SSH outbound
  • Nhận và quản lý quá trình khởi tạo kết nối SSH outbound từ phía ứng dụng client

Cấu hình Thiết bị Junos cho Kết nối SSH Outbound

Để cấu hình thiết bị Junos cho SSH outbound:

Tại cấp cấu hình: [edit system services ssh], thiết lập phiên bản giao thức SSH về v2 bằng cách sử dụng câu lệnh:

[edit system services ssh]

user@host# set protocol-version v2

  • Tạo hoặc lấy một cặp khóa công khai/riêng cho thiết bị đang chạy Junos OS. Cặp khóa này sẽ được sử dụng để mã hóa dữ liệu được truyền qua kết nối SSH.
  • Nếu bạn cài đặt khóa công khai một cách thủ công trên máy chủ quản lý cấu hình, hãy chuyển khóa công khai từ thiết bị Junos sang máy chủ đó.
  • Tại cấp cấu hình [edit system services], hãy thêm khối cấu hình outbound-ssh và các câu lệnh cần thiết bên trong.

[edit system services]

outbound-ssh {

    client client-id {

        address {

            port port-number;

            retry number;

            timeout seconds;

        }

        device-id device-id;

        keep-alive {

            retry number;

            timeout seconds;

        }

        reconnect-strategy (in-order | sticky);

        secret password;

        services  netconf;

    }

}

Các tùy chọn cấu hình như sau:

address

(Bắt buộc) Tên máy (hostname) hoặc địa chỉ IPv4/IPv6 của máy chủ quản lý.
Bạn có thể liệt kê nhiều client bằng cách thêm từng địa chỉ IP hoặc hostname kèm theo các tham số kết nối bên dưới.

  • port port-number - Cổng SSH outbound dành cho client. Mặc định là cổng 22.
  • retry number - Số lần thiết bị cố gắng thiết lập kết nối SSH outbound. Mặc định là 3 lần thử.
  • timeout seconds - Thời gian (tính bằng giây) thiết bị Junos cố gắng thiết lập kết nối SSH outbound. Mặc định là 15 giây mỗi lần thử.
**Lưu ý: Kể từ phiên bản Junos OS 15.1, Junos đã hỗ trợ các kết nối SSH outbound với thiết bị có địa chỉ IPv6.
client client-id(Bắt buộc) Xác định đoạn cấu hình outbound-ssh trên thiết bị.
Mỗi đoạn cấu hình outbound-ssh đại diện cho một kết nối SSH outbound duy nhất. Thuộc tính này không được gửi đến phía client.

device-id

device-id

(Bắt buộc) Xác định thiết bị chạy Junos OS với phía client trong quá trình khởi tạo kết nối.
keep-alive

(Tùy chọn) Xác định rằng thiết bị sẽ gửi các gói tin giữ kết nối (keepalive) tới máy chủ quản lý. Để cấu hình keepalive, bạn phải đặt cả timeout và retry.

  • retry number — Số gói keepalive thiết bị sẽ gửi mà không nhận được phản hồi trước khi ngắt kết nối SSH hiện tại. Mặc định là 3 lần thử.
  • timeout seconds — Thời gian (giây) mà thiết bị chờ dữ liệu trước khi gửi tín hiệu keepalive. Mặc định là 15 giây.
reconnect-strategy (sticky | in-order)

(Tùy chọn) Chỉ định phương thức mà thiết bị Junos sử dụng để tái kết nối nếu SSH outbound bị ngắt:

  • in-order — Thiết bị sẽ thử kết nối lại với máy chủ đầu tiên trong danh sách địa chỉ. Nếu thất bại, nó sẽ thử với máy chủ kế tiếp, và tiếp tục như vậy cho đến khi kết nối thành công.
  • sticky — Thiết bị sẽ cố gắng kết nối lại với máy chủ mà nó đã kết nối trước đó. Nếu không thành công, nó sẽ thử lần lượt với các máy chủ còn lại trong danh sách
secret password(Tùy chọn) Khóa công khai SSH (public SSH host key) của thiết bị. Nếu được thêm vào trong cấu hình outbound-ssh, thiết bị sẽ gửi khóa công khai của mình cho máy chủ quản lý trong quá trình khởi tạo dịch vụ SSH outbound. Đây là phương pháp được khuyến nghị để máy chủ luôn có khóa công khai hiện tại của thiết bị.
services netconf(Bắt buộc) Chỉ định dịch vụ được sử dụng trong phiên SSH. Hiện tại, NETCONF là dịch vụ duy nhất được hỗ trợ.
  • Xác nhận cấu hình

[edit]

user@host# commit

Nhận và Quản lý Trình Tự Khởi Tạo Kết Nối SSH Outbound ở phía Client

Khi được cấu hình để sử dụng SSH outbound, thiết bị Junos sẽ cố gắng duy trì một kết nối liên tục với máy chủ quản lý cấu hình (configuration management server). Bất cứ khi nào phiên SSH outbound chưa được thiết lập, thiết bị sẽ gửi một trình tự khởi tạo kết nối SSH outbound đến máy chủ quản lý cấu hình được liệt kê trong danh sách máy chủ của thiết bị. Trước khi thiết lập được kết nối với thiết bị, mỗi máy chủ quản lý cấu hình cần được cấu hình để nhận trình tự khởi tạo kết nối từ thiết bị, thiết lập kết nối TCP với thiết bị, gửi lại danh tính thiết bị (device identity) cho thiết bị.

Trình tự khởi tạo có hai dạng, tùy thuộc vào cách bạn xử lý khóa công khai (public key) của máy chủ Junos:

  • Nếu khóa công khai được cài đặt thủ công trên máy chủ quản lý cấu hình, trình tự khởi tạo sẽ có dạng như sau:

 

MSG-ID: DEVICE-CONN-INFO\r\n

MSG-VER: V1\r\n

DEVICE-ID: <device-id>\r\n

Nếu khóa công khai được thiết bị chuyển tiếp đến máy chủ quản lý cấu hình trong quá trình khởi tạo, thì trình tự khởi tạo sẽ có dạng như sau:

MSG-ID: DEVICE-CONN-INFO\r\n

MSG-VER: V1\r\n

DEVICE-ID: : <device-id>\r\n

HOST-KEY: \r\n

HMAC: <HMAC(pub-SSH-host-key,<secret>)>\r\n

 

Chúc các bạn thực hiện thành công. Hi vọng bài viết này sẽ giúp ích cho các bạn trong công việc. Nếu bạn có vấn đề gì thắc mắc đừng ngần ngại liên hệ với chúng tôi theo thông tin dưới đây để được hỗ trợ thêm.

Hẹn gặp lại các bạn trong các bài viết tiếp theo !

CÔNG TY CỔ PHẦN DỊCH VỤ CÔNG NGHỆ DATECH

• Địa chỉ: Số 23E4 KĐT Cầu Diễn, Tổ 7, Phú Diễn, Bắc Từ Liêm, Hà Nội

• Điện thoại: 02432012368

• Hotline: 098 115 6699

• Email: info@datech.vn

• Website: https://datech.vn