![](https://blog.crfnetwork.com/wp-content/uploads/2023/04/sshkeystw.webp)
Hướng dẫn sử dụng ssh-copy-key
ssh-copy-id có tác dụng cài đặt SSH key trên máy chủ dưới dạng authorized key (khóa được ủy quyền). Mục đích của nó là cung cấp quyền truy cập mà không yêu cầu mật khẩu cho mỗi lần đăng nhập. Điều này tạo điều kiện cho việc đăng nhập tự động, không mật khẩu và đăng nhập một lần bằng giao thức SSH.
Công cụ ssh-copy-id là một phần của OpenSSH.
Cách thức hoạt động của ssh-copy-id
ssh-copy-id sử dụng SSH protocol để kết nối với máy chủ đích và tải lên SSH user key. Lệnh chỉnh sửa tệp authorized_keys trên server. Nó tạo thư mục .ssh, tạo ra các authorized keys file. ssh key sao chép vào server.
ssh-copy-id cũng kiểm tra xem key đã tồn tại trên server chưa. Trừ khi tùy chọn -f được sử dụng, mỗi key chỉ được thêm vào authorized keys file một lần.
ssh-copy-id tiếp tục đảm bảo rằng các key files quan trọng luôn có quyền thích hợp. Nói chung, thư mục chính của người dùng hoặc bất kỳ tệp hoặc thư mục nào chứa keys files sẽ không được ghi bởi bất kỳ ai khác. Nếu không, bất kì ai đều có thể thêm các authorized keys mới cho người dùng và giành quyền truy cập. Private key files không nên bị đọc bởi người ngoài.
Thiết lập public key authentication
Xác thực dựa trên khóa trong SSH (Key based authentication) được gọi là xác thực khóa công khai (public key authentication). Mục đích của ssh-copy-id là thiết lập xác thực khóa công khai dễ dàng hơn. Quá trình này như sau.
1. Tạo một SSH key
Với OpenSSH, SSH key được tạo bằng ssh-keygen. Ở dạng đơn giản nhất, chỉ cần chạy ssh-keygen và trả lời các câu hỏi. Ví dụ sau minh họa điều này.
![](https://blog.crfnetwork.com/wp-content/uploads/2023/04/ssh-keygen.webp)
Việc tạo một cặp khóa (public key và private key) chỉ mất vài giây. Các tệp khóa thường được lưu trữ trong thư mục ~/.ssh.
Bạn cũng có thể làm tương tự trên Windows với putty-keygen.
2. Copy key tới server
Khi SSH key đã được tạo, lệnh ssh-copy-id có thể được sử dụng để cài đặt làm authorized key trên server. Khi key đã được ủy quyền cho SSH, nó cấp quyền truy cập vào server mà không cần mật khẩu.
Sử dụng lệnh như sau để sao chép SSH key:
ssh-copy-id -i <ssh-key> user@host -p <port>
Điều này sẽ đăng nhập vào server host và sao chép các keys tới server và cấu hình chúng để cấp quyền truy cập bằng cách thêm chúng vào tệp authorized_keys. Việc sao chép có thể yêu cầu mật khẩu hoặc xác thực cho server.
Ví dụ: ssh-copy-id -i ~/.ssh/mykey [email protected]
Chỉ có public key được sao chép vào server. Private key không bao giờ được sao chép sang một máy khác.
3. Test key mới
Khi key đã được sao chép, tốt nhất là hãy tiến hành kiểm tra nó:
ssh -i <ssh-key> user@host
hoặc nếu bạn đặt key mặc định là id_rsa thì có thể login bình thường không cần chỉ định
ssh user@host
Việc đăng nhập bây giờ sẽ được thực hiện mà “không yêu cầu mật khẩu”. Tuy nhiên, lưu ý rằng lệnh có thể yêu cầu cụm mật khẩu bạn chỉ định cho key.
4. Troubleshooting
Có một số lý do khiến test có thể không thành công:
- Server không được cấu hình để chấp nhận public key authentication. Đảm bảo /etc/ssh/sshd_config trên server có chứa PubkeyAuthentication yes. Hãy nhớ khởi động lại quá trình sshd trên server.
- Nếu cố đăng nhập dưới dạng root, server có thể không được cấu hình để cho phép đăng nhập root. Hãy chắc chắn rằng /etc/sshd_config bao gồm PermitRootLogin yes, PermitRootLogin prohibit-password, hoặc không có mật khẩu. Nếu nó được thiết lập để forced-commands-only, key phải được cấu hình bằng tay để sử dụng một lệnh bắt buộc (xem lệnh = tùy chọn trong ~/.ssh/authorized_keys).
- Đảm bảo client cho phép public key authentication. Kiểm tra xem /etc/ssh/config có bao gồm PubkeyAuthentication yes không.
- Hãy thử thêm tùy chọn -v vào lệnh ssh. Đọc output về việc liệu key đó có được thử hay không và phương thức xác thực nào sẽ được server chấp nhận.
- OpenSSH chỉ cho phép tối đa năm keys được thử tự động. Nếu bạn có nhiều keys hơn, bạn phải chỉ định key nào sẽ sử dụng bằng tùy chọn -i để ssh.
Một vài best practices của SSH keys
SSH key rất hữu ích, nhưng có thể dẫn đến sự cố nếu chúng không được quản lý đúng cách. Chúng là các xác nhận truy cập giống như user names và passwords. Nếu chúng không được xóa đúng cách khi mọi người rời khỏi hoặc hệ thống ngừng hoạt động, sẽ không ai có thể biết được ai thực sự có quyền truy cập vào hệ thống và dữ liệu nào. Nhiều tổ chức lớn đã sỡ hữu hàng triệu SSH keys.
Sử dụng Passphrase khi có thể
Các chương trình ssh-agent và ssh-add có thể được sử dụng để tránh phải nhập cụm mật khẩu mỗi khi key được sử dụng.
Thêm giới hạn khi có thể
Một command restriction cơ bản là một tùy chọn một command = “<permitted command>” được thêm vào đầu dòng trong tập tin authorized_keys của server.
Quản lý SSH keys
Công cụ copy-id có thể nguy hiểm. Nó có thể dễ dàng vô tình cài đặt multiple keys hoặc unintended keys khi được ủy quyền. Logic để chọn khóa cần cài đặt nào là phức tạp.
Tùy chọn command-line
ssh-copy-id [-f] [-n] [-i identity file] [-p port] [-o ssh_option] [user@]hostname
SSH-COPY-ID trên MAC
Bạn có thể kiểm tra xem Mac của bạn có hay không bằng cách mở một terminal window (Finder/ Go/ Utilities/ Terminal) và gõ ssh-copy-id.
Cài đặt trên Windows sử dụng HOMEBREW
brew install ssh-copy-id
Cài đặt từ MACPORTS
sudo port install openssh ssh-copy-id
Cài đặt sử dụng CURL
curl -L https://raw.githubusercontent.com/beautifulcode/ssh-copy-id-for-OSX/master/install.sh | sh