it-swarm-vi.tech

Làm cách nào để thiết lập SSH để tôi không phải nhập mật khẩu?

Làm cách nào để thiết lập SSH để tôi không phải nhập mật khẩu khi kết nối với máy chủ?

147
Richard Hoskins

Tạo khóa SSH (nếu bạn không có)

Nếu bạn tình cờ sử dụng Gnome, ứng dụng seahorse ("Mật khẩu và khóa mã hóa") có thể làm điều đó cho bạn: Tệp -> Mới -> Khóa vỏ an toàn .

Nếu bạn thích thiết bị đầu cuối, hãy chạy ssh-keygen -t <type> để tạo một cặp khóa. Các loại khóa hợp lệ là:

  • rsa: mặc định
  • dsa: tương đương nhiều hơn hoặc ít hơn, ngoại trừ giới hạn ở khóa 1024 bit
  • ecdsa: bảo mật tương tự với các khóa nhỏ hơn, nhưng tương đối mới và hơi hiếm trong phần mềm SSH.
  • ed25519: Bảo mật cao (khả năng chống lại các cuộc tấn công kênh bên và khả năng tạo số ngẫu nhiên yếu hơn). Tạo chữ ký rất nhanh. Rất mới. Chỉ khả dụng trong OpenSSH> = 6.5 .

Chương trình sẽ yêu cầu bạn cho cụm mật khẩ và vị trí lưu khóa mới. Nên sử dụng đường dẫn mặc định được đề xuất vì tất cả các công cụ khác sẽ tìm kiếm ở đó.

Tải khóa công khai lên máy chủ từ xa

Một lần nữa, cá ngựa thường có thể làm điều đó cho bạn - trong Khóa cá nhân của tôi , nhấp chuột phải vào Khóa SSH và chọn Định cấu hình khóa cho Shell an toàn .

Hoặc, ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] trong thiết bị đầu cuối.

Hoặc, hoàn toàn thủ công từng bước:

  1. Tạo một thư mục (nếu nó chưa tồn tại) có tên .ssh trong thư mục chính của người dùng từ xa trên Máy chủ từ xa.
  2. Trong thư mục đó, tạo một tệp có tên authorized_keys (nếu nó chưa tồn tại).
  3. Trong trường hợp điều khiển từ xa umask của bạn tự do hơn bình thường, hãy làm cho tệp không thể ghi theo nhóm: chmod go-w ~/.ssh ~/.ssh/authorized_keys.
  4. Cuối cùng, bằng cách nào đó, sao chép (nối) nội dung của khóa công khai cục bộ (~/.ssh/id_rsa.pub) vào tệp ~/.ssh/authorized_keys từ xa.

Nạp khóa vào tác nhân ssh

Nếu bạn tải khóa riêng của mình vào một tác nhân ssh , nó sẽ giữ khóa được giải mã trong bộ nhớ. Chúng tôi muốn điều này để tránh nhập lại mật khẩu bất cứ khi nào chúng tôi Shell vào máy chủ.

Đầu tiên, tác nhân phải được khởi động hoặc đường dẫn của ổ cắm truyền thông được khởi chạy được tải vào một biến. Chạy ssh-agent trên thiết bị đầu cuối sẽ tạo ra các lệnh để gán và thiết lập các biến đại lý. Các lệnh này có thể được lưu trong một tệp để sử dụng trong một thiết bị đầu cuối khác. Ngoài ra, người ta có thể chạy các lệnh này và quên đi việc sử dụng lại cùng một tác nhân trong một thiết bị đầu cuối khác. ví dụ: eval $(ssh-agent).

Tải khóa là một vấn đề đơn giản để thực thi ssh-add và cung cấp cho nó cụm từ vượt qua.

Nếu bạn đang sử dụng Gnome, gnome-keyring-daemon thường cung cấp chức năng đại lý SSH giống như ssh-agent, vì vậy bạn không cần phải bắt đầu bất cứ điều gì. Gnome cũng sẽ tự động tải và mở khóa khi đăng nhập.

Shell vào máy chủ từ xa mà không cần mật khẩu

Nếu mọi thứ đã được thực hiện chính xác, sử dụng ssh [email protected] sẽ không nhắc bạn nhập mật khẩu. Nếu có gì đó không đúng với tác nhân và không phải khóa, bạn sẽ được yêu cầu nhập cụm từ mật khẩu cho khóa và không phải mật khẩu cho tài khoản người dùng.

Bất cứ điều gì sử dụng ssh để liên lạc sẽ hoạt động mà không cần nhập mật khẩu tài khoản người dùng khi khóa chính xác được tải trong tác nhân. Các chương trình như scp , sftp rsync sử dụng cái này.


Ghi chú:

  • Bạn chỉ cần một khóa SSHv2, vì SSHv1 rất không an toàn và hiện không được sử dụng.
  • Bạn cũng chỉ cần một loại khóa - RSA hoặc DSA là đủ. (ed25519 và ECDSA đều gần đây và do đó không được hỗ trợ ở mọi nơi).
  • Tất cả các bước này đều giống nhau cho cả khóa RSA và DSA. Nếu bạn sử dụng DSA, hãy sử dụng id_dsa thay vì id_rsa và ECDSA sẽ có id_ecdsa.
  • Các máy chủ OpenSSH cũ hơn 3.0 đã sử dụng authorized_keys2 - nhưng thực sự không chắc bạn sẽ tìm thấy bất cứ thứ gì cũ hơn 5.0 đang sử dụng.
  • Các hướng dẫn này chỉ áp dụng cho OpenSSH phiên bản 3.0 trở lên. lsh, ssh.com và các máy chủ SSH khác (Unix và không) không được bao gồm trong hướng dẫn này.

Ví dụ:

  • Sao chép khóa chung vào Máy chủ từ xa:

    [.__.] ssh-copy-id -i ~/.ssh/id_rsa.pub myaccount @ remotehost # this [.__.] [. ssh myaccount @ remotehost\[.__.] 'mkdir -p ~/.ssh; mèo >> ~/.ssh/ủy quyền_key '# hoặc này [.__.]
  • Lưu các biến tác nhân để sử dụng lại (ví dụ chi tiết) [.__.]
    [.__.] ssh-agent> ~/.ssh/cross-terminal-agent [.__.]. ~/.ssh/cross-terminal-agent [.__.]
160
grawity

Bạn đã không chỉ định Unix bạn đang sử dụng cái gì, Unix bạn đang kết nối với cái gì, Shell bạn đang sử dụng, biến thể SSH nào bạn đang sử dụng, v.v. Vì vậy, một số điều này có thể cần được điều chỉnh một chút; điều này dựa trên các phiên bản hợp lý gần đây của OpenSSH, được sử dụng trên rất nhiều biến thể unix.

Đây là tất cả từ hệ thống máy tính để bàn địa phương của bạn.

ssh-keygen

Đảm bảo sử dụng mặc định cho tên khóa. Tôi đề nghị bạn do đặt cụm mật khẩu trên khóa đó, nếu không đó là vấn đề bảo mật. "-t rsa" sẽ không phải là một ý tưởng tồi, nhưng có lẽ không cần thiết.

ssh-copy-id [email protected]

Điều đó sẽ hỏi bạn mật khẩu bạn sử dụng để đăng nhập và thiết lập công cụ ủy quyền cho bạn. (không cần phải làm bằng tay)

Thì đây:

`ssh-agent`

hoặc có thể thế này:

exec ssh-agent sh

hoặc là:

exec ssh-agent bash

Điều đó sẽ khởi động một tác nhân SSH có thể giữ khóa của bạn. Trên nhiều biến thể Unix hiện đại, nếu bạn đăng nhập bằng đồ họa, điều này sẽ xảy ra. Biến thể đầu tiên (với backticks) đặt một tác nhân ssh vào nền và thiết lập các biến môi trường để nói chuyện với nó. Hai cái thứ hai có tác nhân chạy Shell cho bạn, để khi bạn thoát Shell, tác nhân sẽ thoát.

Nhiều biến thể Unix hiện đại sẽ có một tác nhân chạy cho bạn, đặc biệt nếu bạn đăng nhập bằng đồ họa. Bạn có thể thử "ps aux | grep ssh-agent" hoặc "ps -ef | grep ssh-agent"; nếu một cái gì đó đang chạy, sử dụng nó.

Sau đó, cuối cùng:

ssh-add

Nó sẽ yêu cầu một mật khẩu; cung cấp cho nó một trong những bạn đã cho ssh-keygen. Cũng có cách để làm cho nó yêu cầu đồ họa. Và bạn có thể đặt công cụ ssh-agent và ssh-add vào tập lệnh đăng nhập của mình (thiết lập khác nhau tùy thuộc vào Shell bạn sử dụng) để tự động hóa việc này, nhưng một số biến thể Unix (ví dụ Ubuntu Linux hiện tại) tự động thực hiện rằng tất cả những gì bạn thực sự cần làm là tạo một khóa và sử dụng ssh-copy-id để thiết lập nó trên Máy chủ từ xa.

Bây giờ, "ssh [email protected]" sẽ hoạt động mà không yêu cầu bất kỳ xác thực nào. Đằng sau hậu trường, nó sử dụng một chiếc chìa khóa mà nhân viên ssh đang cầm và yêu cầu nhân viên thực hiện các thủ thuật ký phép thuật cho nó.

22
freiheit

Bạn cũng có thể làm điều này trong PuTTY trên Windows.

Khi bạn đã có cặp khóa công khai/riêng tư được thiết lập (như các câu trả lời khác ở đây hiển thị) chạy PuttyGen. Trong đó, tải khóa riêng hiện có mà bạn đã thiết lập và sau đó lưu nó dưới dạng khóa riêng PuTTY (ppk).

Sau đó, trong PuTTY, chỉ cần nhấp vào phiên đã lưu mà bạn muốn tự động đăng nhập và nhấp vào Tải. Từ đây đi vào Kết nối -> Dữ liệu trong ngăn bên trái và nhập "Tên người dùng đăng nhập tự động" trong tên người dùng cho máy chủ từ xa đó:

PuTTY username entry

Sau đó, đi vào Kết nối -> SSH -> Xác thực và duyệt tìm ppk bạn đã tạo trong PuttyGen:

PuTTY private key entry

Sau đó quay lại trang phiên và lưu phiên bạn đã tải trước đó.

11

Từ một câu hỏi tương tự trên ServerFault , tôi khuyên bạn nên sử dụng ssh-copy-id , trong đó tất cả các bước liên quan đến việc thiết lập khóa xác thực cho bạn:

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 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.

Tất cả bạn cần làm chỉ đơn giản là thế này:

ssh-copy-id [email protected]

Nhập mật khẩu của bạn một lần, và bạn tốt để đi!

3
Chris Bunch

Ngoài tất cả những gì đã được nói về cách đặt khóa ssh, tôi khuyên bạn nên Keychain dưới dạng giao diện điều khiển ssh-agent cho phép bạn chỉ xử lý một lần cho mỗi quy trình hệ thống thay vì mỗi lần đăng nhập.

Tôi biết đã có các công cụ Gnome và KDE làm tương tự nhưng nếu bạn là loại bảng điều khiển rác thì điều này thật tuyệt (và có thể được sử dụng trên hầu hết Unix hệ thống).

Để sử dụng nó, chỉ cần thêm phần sau vào ~/.bashrc của bạn (tương tự cho các shell khác):

if type keychain >/dev/null 2>/dev/null; then
  keychain --nogui -q <all your SSH/PGP keys>
  [ -f ~/.keychain/${HOSTNAME}-sh ] && . ~/.keychain/${HOSTNAME}-sh
  [ -f ~/.keychain/${HOSTNAME}-sh-gpg ] && . ~/.keychain/${HOSTNAME}-sh-gpg
fi
3
scetoaux

PuTTY có tùy chọn -pw cho phép bạn tạo một lối tắt trên màn hình như thế này:

"C:\Program Files\PuTTY\putty.exe" -ssh [email protected] -pw your_password
2
Genc Hosting

Tôi đã viết hướng dẫn rất ngắn này sau khi thực sự thất vọng với THỰC SỰ THỰC SỰ hướng dẫn dài vì thực sự nó rất đơn giản :)

test -f ~/.ssh/id_rsa.pub || ssh-keygen -t rsa #press enter twice if given prompts, then "ssh-add"

scp ~/.ssh/id_rsa.pub [email protected]:/tmp/ #type password

ssh [email protected] #type password

cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

rm /tmp/id_rsa.pub
2
samthebest

http://linuxprobols.org/art_9.html

Mục tiêu của bạn

Bạn muốn sử dụng Linux và OpenSSH để tự động hóa các tác vụ của mình. Do đó, bạn cần đăng nhập tự động từ Máy chủ A/người dùng a đến Máy chủ B/người dùng b. Bạn không muốn nhập bất kỳ mật khẩu nào, vì bạn muốn gọi ssh từ một tập lệnh Shell.

2
TheTXI
  1. Trên máy chủ kết nối, hãy chạy ssh-keygen. (Nếu nó cho bạn biết bạn phải chỉ định một loại, hãy làm ssh-keygen -t rsa.) Khi nó yêu cầu bạn cho một vị trí tệp, hãy lấy mặc định. Khi nó hỏi bạn một cụm mật khẩu, hãy nhấn enter để không có cụm mật khẩu.
  2. cat ~/.ssh/id_rsa.pub (hoặc bất cứ vị trí tệp mặc định nào trong ssh-keygen là, mặc dù bạn phải cài đặt thật sựssh để cài đặt khác); sao chép đầu ra vào clipboard của bạn.
  3. Đăng nhập bình thường vào Máy chủ đích như tài khoản bạn muốn kết nối. Chỉnh sửa tệp ~/.ssh/authorized_keys (nếu ~/.ssh không tồn tại, slogin thành một nơi nào đó; đây là cách đơn giản, dễ dàng để tạo tệp với quyền phù hợp). Dán bảng tạm của bạn (chứa id_rsa.pub từ Máy chủ khác) vào tệp này.
1
chaos

Nếu bạn muốn làm tất cả trong thiết bị đầu cuối trong Linux:

Trên máy chủ

cd ~/.ssh /

ssh-keygen -t {rsa | dsa} -b {1024 | 2048 | 4096} -C "một số văn bản nhận xét nếu bạn muốn" -f id_ArbitraryName

Các mục trong {} là các tùy chọn, sử dụng rsa hoặc dsa và chọn kích thước bit (lớn hơn sẽ an toàn hơn)

Sau đó, bạn cần thêm quyền vào các tệp ủy quyền và khóa ủy quyền.

mèo id_ArbitraryName.pub >> ủy quyền

mèo id_AribtraryName.pub >> ủy quyền_keys2

Sau đó tải tệp id_AribtraryName vào hộp bạn muốn ssh từ đó. Nếu hộp kết nối là unix dựa, một tập tin cấu hình có thể là cần thiết (trong PuTTY, một người nào đó ở trên đã đề cập đến điều đó).

Trên hộp kết nối

Trong tệp cấu hình của bạn - vim ~/.ssh/config

Ví dụ máy chủ.Host.com # hoặc tên máy tính của bạn

Tên người dùng

Danh tínhFile ~/.ssh/id_ArbitraryName

Tệp cấu hình cần quyền 600. Thư mục SSh cần 700.

Hy vọng rằng sẽ giúp nếu bạn gặp phải vấn đề cấu hình bị bỏ qua rất nhiều.

0
nerdwaller