Làm thế nào để bạn thiết lập ssh để xác thực bằng cách sử dụng khóa thay vì tên người dùng / mật khẩu?


34

Làm thế nào để bạn thiết lập ssh để xác thực người dùng bằng khóa thay vì tên người dùng / mật khẩu?

Câu trả lời:


27

Đối với mỗi người dùng: họ nên tạo (trên máy cục bộ) bằng cách sử dụng khóa của họ ssh-keygen -t rsa( rsacó thể thay thế bằng dsahoặc rsa1quá, mặc dù các tùy chọn đó không được khuyến nghị). Sau đó, họ cần đưa nội dung của khóa công khai ( id_rsa.pub) vào ~/.ssh/authorized_keysmáy chủ đang đăng nhập.


Điều khác duy nhất tôi sẽ thêm vào điều này là xem xét các quyền trên tệp và thư mục.
trent

2
Đừng quên chmod 0700 .ssh chmod 0600 .ssh / ủy
quyền_key

3
Chắc chắn tạo các khóa theo cách này nhưng sau đó kiểm tra bài đăng của @Chris Bunch liên quan đến "ssh-copy-id". Đó là cách để chuyển 'id_rsa.pub' của bạn.
Gareth

@gyaresu: Cảm ơn! Tôi vừa học được một điều mới! :-D
Chris Jester-Young

23

Tôi thực sự thích ssh-copy-id , một tập lệnh được tìm thấy trên * nix theo mặc định (có thể được đặt trên Mac OS X một cách dễ dàng) cũng tự động làm điều này cho bạn. Từ trang người đàn ông:

ssh-copy-id là một tập lệnh sử dụng ssh để đăng nhập vào một máy từ xa (có lẽ sử dụng mật khẩu đăng nhập, vì vậy nên xác thực mật khẩu, trừ khi bạn đã sử dụng thông minh nhiều danh tính)

Nó cũng thay đổi các quyền của nhà người dùng từ xa, ~ / .ssh và ~ / .ssh / ủy quyền để xóa khả năng ghi của nhóm (điều này sẽ ngăn bạn đăng nhập, nếu sshd từ xa có StrictModes được đặt trong cấu hình của nó).

Nếu tùy chọn -i được cung cấp thì tệp nhận dạng (mặc định là ~ / .ssh / id.pub) được sử dụng, bất kể có bất kỳ khóa nào trong tác nhân ssh của bạn hay không.


2
@Chris Bunch MỌI NGƯỜI XEM TẠI ĐÂY! :) ssh-copy-id chắc chắn là cách để chia sẻ id_rsa.pub của một người
Gareth

1
Thật tuyệt, tôi chưa bao giờ biết về điều này ... Tôi đã viết kịch bản của riêng mình để thực hiện chính xác điều tương tự: - /
David Z

6

Hum, đừng hiểu. Đơn giản chỉ cần tạo một chìa khóa và bắt đầu. :) HOWTO Ngoài ra, bạn có thể cấm đăng nhập qua mật khẩu. Trong ví dụ / etc / ssh / sshd_config:

PasswordAuthentication no

2
Và bạn cũng cần đặt UsePAM no (hoặc cấu hình PAM tương ứng). Thật đáng ngạc nhiên khi có nhiều HOWTO bỏ lỡ phần này. Không làm như vậy sẽ dẫn đến việc bạn vẫn có thể đăng nhập bằng mật khẩu.
Nathan

3

Điều này khá đơn giản để thực hiện - có một hướng dẫn đơn giản được tìm thấy ở đây .

Những điểm chính là:

  • Chạy ssh-keygentrên máy của bạn. Điều này sẽ tạo khóa công khai và riêng tư cho bạn.
  • Sao chép và dán nội dung của khóa công khai của bạn (có thể vào ~/.ssh/id_rsa.pub) vào ~/.ssh/authorized_keystrên máy từ xa.

Điều quan trọng cần nhớ là điều này sẽ cung cấp cho bất kỳ ai có quyền truy cập vào khóa riêng trên máy của bạn cùng quyền truy cập vào máy từ xa, vì vậy khi tạo cặp khóa, bạn có thể chọn nhập mật khẩu tại đây để bảo mật hơn.


Tôi khuyên bạn nên cắt và dán thay vì sao chép. Tệp ủy quyền có thể chứa nhiều khóa và bạn không muốn ghi đè các khóa khác đã có trong đó.
Chris Jester-Young

Hướng dẫn yêu thích của tôi đã được ký gửi vào Wayback Machine: web.archive.org/web/20061103161446/http:// hồi
Philip Durbin

@Chris oops - Tôi đã có ý định sao chép nó vào tập tin chứ không phải ghi đè! Trả lời được cập nhật ngay bây giờ để làm rõ
ConroyP


1

Để tóm tắt những gì người khác đã nói, việc thiết lập các khóa SSH rất dễ dàng và vô giá.

Trên máy mà bạn sẽ SSH từ bạn cần để tạo cặp khóa của bạn:

claudius:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/dinomite/.ssh/id_rsa): <ENTER>
Enter passphrase (empty for no passphrase): <PASSPHRASE>
Enter same passphrase again: <PASSPHRASE>
Your identification has been saved in /home/dinomite/.ssh/id_rsa.
Your public key has been saved in /home/dinomite/.ssh/id_rsa.pub.
The key fingerprint is:
a3:93:8c:27:15:67:fa:9f:5d:42:3a:bb:9d:db:93:db dinomite@claudius

Chỉ cần nhấn enter khi được ghi chú và nhập cụm mật khẩu khi được nhắc - lý tưởng là khác với mật khẩu đăng nhập thông thường của bạn trên cả máy chủ hiện tại và mật khẩu bạn sẽ SSH.

Tiếp theo, bạn cần phải sao chép chìa khóa mà bạn vừa tạo ra để các máy chủ mà bạn muốn SSH để . Hầu hết các bản phân phối Linux có một công cụ ssh-copy-idđể thực hiện việc này:

claudius:~$ ssh-copy-id caligula.dinomite.net
Now try logging into the machine, with "ssh 'caligula.dinomite.net'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

Nếu bản phân phối của bạn không có điều đó, thì bạn nên sao chép khóa vào máy chủ đích và thêm nó vào .ssh/authorized_keystệp (có thể có) :

claudius:~$ scp .ssh/id_dsa.pub caligula.dinomite.net:
id_dsa.pub                                    100% 1119     1.1KB/s   00:00
claudius:~$ ssh caligula.dinomite.net
Last login: Sat May  9 10:32:30 2009 from claudius.csh.rit.edu
Caligula:~$ cat id_dsa.pub >> .ssh/authorized_keys

Cuối cùng, để đạt được lợi ích tối đa từ các khóa SSH, bạn sẽ muốn chạy một tác nhân SSH. Nếu bạn sử dụng môi trường máy tính để bàn (Gnome, KDE, v.v.) thì chỉ cần đăng xuất và đăng nhập lại sẽ bắt đầu một tác nhân SSH cho bạn. Nếu không, bạn có thể thêm dòng sau vào shell của bạn RC file ( .bashrc, .profile, vv):

SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
    eval `$SSHAGENT $SSHAGENTARGS`
trap "kill $SSH_AGENT_PID" 0
fi

1

Điều này được dự định như một danh sách kiểm tra. Nếu một người theo dõi từng điểm một, các vấn đề phổ biến nhất đối với thông tin đăng nhập không cần mật khẩu sẽ được đề cập. Hầu hết các điểm này được đề cập ở nơi khác; đây là một tập hợp.

Phải có một ~/.sshthư mục chmod 700trên mỗi máy trong tài khoản sẽ khởi tạo hoặc nhận các kết nối.

Khóa (riêng tư) phải được tạo mà không có cụm mật khẩu hoặc có thể khởi động một tác nhân sẽ giữ phiên bản được giải mã của khóa mang cụm mật khẩu cho khách hàng sử dụng. Bắt đầu đại lý với ssh-agent $SHELL. Đó là $SHELLphần mà tôi phải mất một thời gian để tìm thấy. Xem trang người đàn ông vì có nhiều chi tiết nếu bạn muốn sử dụng một tác nhân.

Đừng quên rằng các khóa yếu (<2048 bit DSA) mặc định không được chấp nhận bởi các phiên bản gần đây của sshd.

Những điều sau đây phải được thực hiện trên máy phía khách để tạo kết nối.

  1. Khóa riêng của bạn phải được đặt trong ~/.ssh/id_rsahoặc ~/.ssh/id_dsakhi thích hợp. Bạn có thể sử dụng tên khác, nhưng sau đó nó phải được đưa vào tùy chọn -i trên lệnh ssh trên máy gốc để chỉ rõ ràng khóa riêng.

  2. Khóa riêng của bạn phải được chmod 600.

  3. Kiểm tra xem thư mục nhà của bạn là chmod 700.

Bây giờ cho phép một máy để nhận được một yêu cầu. Một mô hình phổ biến là nơi quản trị viên cấp cho bạn quyền truy cập vào máy bạn không sở hữu (như lưu trữ web được chia sẻ). Do đó, ý tưởng với ssh là bạn cung cấp khóa công khai của mình cho bất kỳ ai cung cấp cho bạn tài khoản. Đó là lý do tại sao bạn thường không đặt khóa riêng trên máy nhận yêu cầu. Nhưng, nếu bạn muốn máy này cũng thực hiện ssh, thì bạn phải coi nó như một máy gốc với các bước ở trên.

  1. Khóa công khai của bạn phải được đặt trong một tệp được gọi ~/.ssh/authorized_keystrong tài khoản sẽ nhận các kết nối. Bạn cũng có thể đặt các khóa khác được phép kết nối qua tài khoản này tại đây. Một điều đặc biệt khó khăn nếu bạn ở vi và dán khóa vào tệp từ bộ đệm dán trong PuTTY là đây: khóa bắt đầu bằng "ssh-". Nếu bạn không ở chế độ chèn, "s" đầu tiên sẽ đặt vi ở chế độ chèn và phần còn lại của phím sẽ trông ổn. Nhưng bạn sẽ thiếu một "s" ở đầu khóa. Phải mất nhiều ngày để tôi tìm thấy điều đó.
  2. Tôi thích chmod 600 ~/.ssh/authorized_keys. Nó phải được ít nhất là gw.
  3. Bây giờ, bạn phải có dấu vân tay máy chủ được thêm vào bộ đệm. Chuyển đến máy A và ssh sang máy B theo cách thủ công. Lần đầu tiên, bạn sẽ nhận được một truy vấn như "Bạn có muốn thêm .. vào bộ đệm của khóa máy chủ không?". Nếu bạn đang cố gắng tự động hóa (chẳng hạn như tập lệnh) để sử dụng thông tin đăng nhập này, bạn phải đảm bảo rằng ứng dụng khách ssh đang được tự động hóa sử dụng sẽ không nhận được lời nhắc này.

0

Như những người khác đã nói, người dùng của bạn nên tự tạo bàn phím trên máy khách của họ bằng ssh-keygen và thêm khóa công khai của họ vào ~ / .ssh / ủy quyền trên máy họ muốn đăng nhập.

Để biết thêm thông tin chi tiết, tôi khuyên bạn nên sử dụng SSH, Secure Shell .


0

Có lời khuyên tốt ở đây, vì vậy tôi sẽ không lặp lại. Khi bạn nhận được một máy chủ được thiết lập để cho phép bạn đăng nhập bằng các khóa, bạn có thể thiết lập các máy chủ khác để thực hiện tương tự với một lớp lót này:

remote=server1 server2 server3 server4
for r in $remote; do echo connecting to $r; tar czf - ./.ssh/id*.pub ./.ssh/authorized_keys2 ./.ssh/config | ssh $r "tar zxf -; chmod 700 .ssh" ; done

Chỉ cần cd vào thư mục chính của bạn, xác định biến từ xa là một hoặc nhiều tên máy chủ và thực hiện một bó cùng một lúc. Mật khẩu mà nó yêu cầu sẽ là mật khẩu ssh của bạn cho máy chủ từ xa. Tất nhiên bạn có thể sử dụng một phiên bản đơn giản hóa mà không cần vòng lặp for:

tar czf - ./.ssh/id*.pub ./.ssh/authorized_keys2 ./.ssh/config | ssh YOUR_SERVER_NAME_HERE "tar ztvf -; chmod 700 .ssh"

NHỚ: Chỉ sao chép qua các khóa công khai của bạn. Bạn không muốn các khóa riêng tư của mình nằm trên một số máy chủ, nơi bất kỳ ai có sudo đều có thể sao chép chúng và buộc phải sử dụng mật khẩu của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.