Chạy tập lệnh tự động qua SSH
Chúng tôi đã chỉ cho bạn cách sử dụng SSH để truyền tệp an toàn. Nhưng có một vấn đề lớn với hành vi mặc định của SSH. Bạn chỉ được kết nối với máy từ xa sau khi đã nhập mật khẩu theo cách thủ công, quy tắc này cho bất kỳ tác vụ nào bạn muốn chạy không cần giám sát. Hay không?
Dưới đây là phần tóm tắt nhanh về cách các công cụ OpenSSH CLI (scp và sftp) hoạt động để bạn có thể đánh giá cao hơn vấn đề này. Khi bạn muốn sao chép các tập tin đến hoặc từ máy chủ từ xa, bạn có thể sử dụng scp để tự động khởi tạo kết nối SSH đến máy chủ từ xa. Mỗi khi bạn chạy lệnh scp, nó sẽ thiết lập kết nối mới với điều khiển từ xa. Vì vậy, nếu bạn có nhiều lệnh scp bạn sẽ nhập cùng một mật khẩu nhiều lần.
Đây là lý do tại sao bạn không muốn sử dụng scp trong bất kỳ tập lệnh nào bạn muốn chạy không giám sát. Ngoài ra còn có một thực tế là nếu bạn có nhiều tài khoản trên một số máy trên mạng, bạn sẽ gặp khó khăn khi ghi nhớ mật khẩu độc đáo, mạnh mẽ cho mỗi máy.
Để khắc phục vấn đề này, bạn cần phải chuyển đổi cơ chế xác thực mặc định của OpenSSH thành một hệ thống dựa trên khóa.
Chìa khóa thành công
Theo mặc định OpenSSH chỉ sử dụng các khóa để xác thực danh tính của máy chủ trong lần đầu tiên một máy khách gặp một máy từ xa mới:
$ ssh [email protected] Tính xác thực của host 'atlantis.remote.com (atlantis.remote.com)' không thể được thiết lập. Dấu vân tay khóa ECDSA là da: e8: a2: 77: f4: e5: 10: 56: 6d: d4: d2: dc: 15: 8e: 91: 22. Bạn có chắc chắn muốn tiếp tục kết nối (có / không)?
Khi bạn trả lời bằng cách gõ "có", máy chủ từ xa sẽ được thêm vào danh sách các máy chủ đã biết. Vì vậy, ngoài máy chủ xác thực máy khách bằng cách yêu cầu mật khẩu, máy khách cũng xác thực máy chủ bằng cách sử dụng một khóa.
Tương tự, bạn cũng có thể tự đặt cho mình một bộ chìa khóa để chứng minh danh tính của bạn. OpenSSH sử dụng một cặp khóa để chứng minh danh tính của bạn và tạo kết nối an toàn tới máy chủ từ xa. Khóa riêng tư chỉ dành cho mắt của bạn và được sử dụng bởi ứng dụng OpenSSH của bạn để chứng minh danh tính của bạn với máy chủ. Sau đó, có khóa công khai mà bạn phải giữ trong tất cả các tài khoản của bạn trên tất cả các máy từ xa mà bạn muốn SSH vào.
Để tạo khóa, khách hàng của bạn nhập:
$ ssh-keygen Tạo cặp khóa rsa công khai / riêng. Nhập tệp để lưu khóa (/home/bodhi/.ssh/id_rsa): Nhập cụm mật khẩu (trống cho không có cụm mật khẩu): Nhập lại cùng một cụm mật khẩu: Nhận dạng của bạn đã được lưu trong /home/bodhi/.ssh/id_rsa. Khóa công khai của bạn đã được lưu trong /home/bodhi/.ssh/id_rsa.pub.
Hãy nhớ không để trống cụm mật khẩu và ghi chú vị trí lưu trữ khóa. Tệp “id_rsa” chỉ có thể đọc được bởi tài khoản của bạn và nội dung của nó được mã hóa bằng cụm mật khẩu bạn đã cung cấp trong quá trình tạo.
Bước tiếp theo là sao chép khóa công khai đến máy chủ từ xa. Giả sử bạn muốn đăng nhập vào “admin” của người dùng trên máy từ xa có tên “atlantis.remote.com”, bạn có thể di chuyển các phím bằng một lệnh duy nhất:
$ ssh-copy-id -i ~ / .ssh / id_rsa.pub [email protected] Mật khẩu [email protected]:
Sau khi bạn đã cung cấp cụm mật khẩu cho khóa riêng của mình, khóa công cộng sẽ được tự động đặt vào đúng vị trí trên máy chủ từ xa, theo mặc định là tệp “~ / .ssh / authorized_keys”.
Khi bạn ssh vào máy từ xa, bạn sẽ được nhắc cho cụm từ mật khẩu của bạn. Ưu điểm duy nhất của việc sử dụng khóa là thay vì xác thực bạn bằng mật khẩu được truyền không được mã hóa, máy chủ từ xa và máy khách của bạn sẽ thiết lập danh tính của bạn dựa trên các khóa.
Ngoài ra, bây giờ bạn có thể ssh vào một số hộp từ xa bằng cách sử dụng cùng một mật khẩu, miễn là các máy từ xa này có khóa công khai của bạn. Vì vậy, bạn không cần phải nhớ nhiều mật khẩu.
Nhưng bạn vẫn không thể chạy tập lệnh mà không bị gián đoạn cho cụm mật khẩu.
Liên quan : Làm thế nào để kích hoạt tính năng xác thực hai yếu tố cho kết nối SSH
SSH-agent để giải cứu
OpenSSH bao gồm một công cụ được gọi là ssh-agent, giữ các khóa riêng của bạn trong bộ nhớ. Khi tác nhân đang chạy, thay vì nhắc bạn mật khẩu, các máy khách SSH sẽ tương tác với tác nhân.
Bạn có thể bắt đầu tác nhân với " ssh-agent /bin/bash
", giả sử bạn đang sử dụng bash shell.
Bất kỳ lệnh nào yêu cầu quyền truy cập vào khóa riêng OpenSSH của bạn sẽ bị chặn và được trả lời bởi tác nhân.
Khi tác nhân chạy, bạn cần trang bị cho nó chìa khóa của bạn. Điều này được thực hiện bằng cách gọi chương trình "ssh-add" mà theo mặc định tải các khóa từ tệp nhận dạng mặc định (~ / .ssh / id_rsa).
$ ssh-add Nhập cụm mật khẩu cho /home/bodhi/.ssh/id_rsa: Danh tính được thêm: /home/bodhi/.ssh/id_rsa (/home/bodhi/.ssh/id_rsa)
Bây giờ khi bạn đăng nhập vào máy tính từ xa với " ssh [email protected]
", bạn sẽ được phép mà không cần nhập cụm mật khẩu!
Tương tự như vậy, scp và sftp cũng sẽ có thể kết nối với các máy chủ từ xa mà không bao giờ hỏi bạn mật khẩu. Vì vậy, bây giờ bạn có thể lên lịch và chạy các tập lệnh tự động thao tác các tệp trên máy từ xa.
Ngoài ra, bây giờ bạn đang sử dụng các khóa, bạn nên tắt xác thực thông qua mật khẩu. Để thực hiện việc này, hãy chỉnh sửa tệp cấu hình của máy chủ từ xa (/etc/ssh/.sshd_config) và thay đổi tham số “ PasswordAuthentication
” từ “yes” thành “no”. Từ bây giờ, nếu có ai đó cố gắng kết nối với dịch vụ SSH của bạn, những người không có khóa công khai trên máy chủ, họ sẽ bị từ chối truy cập mà không nhìn thấy lời nhắc đăng nhập.
Hình ảnh tín dụng: Karunakar Rayker