Câu hỏi 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ủ?


136
2017-07-18 16:51


gốc


Người ta có thể tranh luận nếu sử dụng các phím như vậy không yêu cầu mật khẩu. Để tránh bất cứ ai bị giữ khóa cá nhân của bạn thực sự có thể lạm dụng nó, người ta có thể bảo vệ chìa khóa bằng mật khẩu của chính nó. Tất nhiên, người ta có thể để trống mật khẩu đó, nhưng có nhiều trường hợp không được đề xuất. - Arjan
Trên Cygwin mới nhất với SSH mới nhất, tôi đã được nhắc lại vì tôi cần thay đổi ~/.ssh/config bây giờ là bắt buộc PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss* - HDave


Các câu trả lời:


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

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

Nếu bạn thích thiết bị đầu cuối, hãy chạy ssh-keygen -t <type> để tạo ra một cặp khóa. Các loại cặp 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ừ các khóa 1024 bit
  • ecdsa: cùng bảo mật với các phím 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 tấn công kênh phụ và các trình tạo số ngẫu nhiên yếu). Tạo chữ ký rất nhanh. Rất mới. Chỉ có sẵn trong OpenSSH> = 6,5.

Chương trình sẽ hỏi bạn một cụm từ mật khẩu và vị trí lưu khóa mới. Sử dụng đường dẫn mặc định được đề xuất được khuyến nghị 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

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 của bạn và chọn Định cấu hình khóa cho vỏ an toàn.

Hoặc là, ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-host trong nhà ga.

Hoặc, hoàn toàn theo cách 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 của bạn umask tự do hơn bình thường, làm cho tệp không thể ghi 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 thêm) nội dung của địa phương của bạn khóa công khai (~/.ssh/id_rsa.pub) vào điều khiển từ xa ~/.ssh/authorized_keys tập tin.

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

Nếu bạn tải khóa riêng của bạn vào một ssh đặc vụ, 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 đưa vào máy chủ.

Trước tiên, tác nhân phải được bắt đầu hoặc đường dẫn của một ổ cắm truyền thông được khởi chạy được nạp vào một biến. Đang chạy ssh-agent trên một 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 của việc thực thi ssh-add và cho nó cụm từ mật khẩu.

Nếu bạn đang sử dụng GNOME, gnome-keyring-daemon thường cung cấp chức năng tác nhân 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ở khoá 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 đúng, sử dụng ssh người dùng @ serversẽ không nhắc bạn nhập mật khẩu. Nếu có điều gì đó không đúng với đại lý và không phải là chìa khóa, bạn sẽ được yêu cầu nhập cụm từ mật khẩu cho khóa đó chứ không phải mật khẩu cho tài khoản người dùng.

Bất cứ thứ gì sử dụng ssh để giao tiếp 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 nạp vào tác nhân. Các chương trình như scp, sftp và rsync tận dụng điều này.


Ghi chú:

  • Bạn chỉ cần một khóa SSHv2, vì SSHv1 rất không an toàn và bây giờ 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 vừa mới 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ả hai khóa RSA và DSA. Nếu bạn sử dụng DSA, hãy sử dụng id_dsa thay vì id_rsavà ECDSA sẽ có id_ecdsa.
  • Máy chủ OpenSSH cũ hơn 3.0 được sử dụng authorized_keys2 - nhưng nó thực sự không chắc bạn sẽ tìm thấy bất cứ điều gì cũ hơn 5.0 trong sử dụng.
  • Những hướng dẫn này chỉ áp dụng cho OpenSSH phiên bản 3.0 và mới hơn. lsh, ssh.comvà các máy chủ SSH khác (Unix và không) không có trong hướng dẫn này.

Ví dụ:

  • Sao chép khóa công khai vào máy chủ từ xa:

    ssh-copy-id -i ~ / .ssh / id_rsa.pub myaccount @ remotehost # cái này
    
    mèo ~ / .ssh / id_rsa.pub | ssh myaccount @ remotehost \
          'mkdir -p ~ / .ssh; mèo >> ~ / .ssh / authorized_keys '# hoặc cái này
    
  • Lưu các biến tác nhân để sử dụng lại (ví dụ phức tạp)
    ssh-agent> ~ / .ssh / cross-thiết bị đầu cuối-đại lý
    . ~ / .ssh / cross-terminal-agent
    

152



ah, bạn phải nói "ssh-add {path-to-private-key-file}" và sau đó nó sẽ hỏi bạn mật khẩu của bạn. Hãy làm điều này rõ ràng hơn trong bài đăng của bạn. Bạn cũng nên thêm "Thứ tư, chạy ssh". Một phần của vấn đề với tài liệu với công cụ này là nó làm sáng tỏ các bước dường như rõ ràng không rõ ràng đối với một người mới tham gia vào quá trình không biết điều gì đang diễn ra và cách các chương trình này hoạt động cùng nhau. - Jason S
Jason: ssh-add -l là kiểm tra xem một tác nhân có đang chạy hay không. ssh-add không có đối số sẽ thêm khóa từ vị trí mặc định (là ~ / .ssh / id_rsa). Dù sao, cập nhật. - grawity
có một lệnh ssh-copy-id sao chép khóa công khai vào máy chủ đích và đặt quyền tự động. - hasen
Câu trả lời chính xác! Đó là thiếu một chút về quyền truy cập tập tin của các tập tin quan trọng - Tôi chỉ có một vấn đề liên quan đến điều đó ngày hôm nay. Tôi chỉ có thể truy cập tệp khóa riêng tư và tệp khóa công khai chỉ có thể ghi được bởi tôi. - ripper234
Lót: ssh-keygen -f ~/.ssh/id_rsa -N "";ssh-copy-id -i ~/.ssh/id_rsa username@server-ip-or-address (chỉ cần thay thế username@server-ip-or-address). - totymedli


Bạn không chỉ rõ Unix bạn đang sử dụng cái gì, bạn đang kết nối với Unix nào, bạn đang sử dụng shell gì, biến thể SSH nào bạn đang sử dụng, vv 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 OpenSSH hợp lý gần đây, đượ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 cục bộ 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 làm đặt cụm mật khẩu trên khóa đó, nếu không thì đó 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ẽ là không cần thiết.

ssh-copy-id username@server

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

Thì đây:

`ssh-agent`

hoặc có thể điều này:

exec ssh-agent sh

hoặc là:

exec ssh-agent bash

Điều đó sẽ bắt đầu 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ẽ diễn ra. Biến thể đầu tiên (với backticks) đặt một ssh-agent 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 thứ hai có tác nhân chạy một shell cho bạn, để khi bạn thoát khỏi shell, agent thoát ra.

Nhiều biến thể Unix hiện đại sẽ có một tác nhân đang 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 là "ps -ef | grep ssh-agent"; nếu có điều gì đó đang chạy, hãy sử dụng nó.

Sau đó, cuối cùng:

ssh-add

Nó sẽ yêu cầu một cụm từ mật khẩu; cho nó cái bạn đã cho ssh-keygen. Ngoài ra còn có cách để làm cho nó hỏi đồ họa. Và bạn có thể đặt công cụ ssh-agent và ssh-add vào kịch bản đăng nhập của bạn (thiết lập khác nhau tùy thuộc vào shell bạn sử dụng) để tự động hóa điều này, nhưng một số biến thể Unix (ví dụ như Ubuntu Linux hiện hành) 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.

Hiện nay, "ssh username@serverPhía sau hậu trường, nó sử dụng một khóa mà ssh-agent đang giữ, và yêu cầu người đại diện thực hiện các thủ thuật ký tên cho nó.


18





Có thể làm điều này trong PuTTY trên Windows.

Sau khi bạn đã thiết lập cặp khóa công khai / riêng tư (như các câu trả lời khác ở đây), hãy chạy PuttyGen. Trong đó, tải khóa cá nhân hiện có mà bạn đã thiết lập rồi lưu nó dưới dạng khóa riêng tư 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 Connection -> Data trong khung bên trái, và trong "Auto-login username" gõ vào tên người dùng cho máy chủ từ xa đó:

PuTTY username entry

Sau đó đi vào kết nối -> SSH -> Auth, và duyệt cho các ppk bạn đã thực hiện trong PuttyGen:

PuTTY private key entry

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


11



Liên kết hình ảnh đầu tiên, "mục nhập tên người dùng PuTTY", dường như bị hỏng. - Peter Mortensen
PuTTY bao gồm phiên bản ssh-agent của riêng nó; nó được gọi là Pageant. Nó chạy trong khay hệ thống và giữ chìa khóa cho bạn. Bạn không cần chạy ssh-agent, chỉ cần kiểm tra "Cho phép chuyển tiếp đại lý" trong các tùy chọn của PuTTY trong phần Auth, và kết nối của Pageant sẽ được chuyển tiếp đến đầu cuối để làm cho tác nhân khóa của bạn có sẵn. - Kevin Panko


Từ một câu hỏi rất giống nhau về ServerFault, Tôi khuyên bạn nên sử dụng ssh-copy-id, thực hiện 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áy từ xa   (có lẽ sử dụng mật khẩu đăng nhập, vì vậy   xác thực mật khẩu phải là   được bật, trừ khi bạn đã thực hiện một số   sử dụng thông minh nhiều danh tính)

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

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

Tất cả những gì bạn cần làm chỉ đơn giản là:

ssh-copy-id user@host

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


3





Ngoài tất cả đã được nói về cách thiết lập các khóa ssh, tôi khuyên bạn nên Keychain như một ssh-agent giao diện điều khiển giao diện người dùng cho phép bạn 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 thực hiện tương tự nhưng nếu bạn là console junkie loại này là rất tốt (và có thể được sử dụng trên hầu hết các hệ thống Unix).

Để sử dụng nó, chỉ cần thêm phần sau vào ~/.bashrc (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





http://linuxproblem.org/art_9.html

Mục đích của bạn

Bạn muốn sử dụng Linux và OpenSSH để tự động hoá 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 đế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, bởi vì bạn muốn gọi ssh từ một kịch bản lệnh shell.


2



Downvote không phải của tôi, nhưng tôi sẽ không nhớ mọi người xóa câu trả lời của họ nếu họ nhận thấy ai đó đã đăng một câu trả lời gần như tương tự một vài phút trước đó. - Arjan
Arjan: Đối với hầu hết các phần tôi đồng ý với bạn, nhưng khi các bài viết chỉ được phân cách bởi vài giây tôi không nhất thiết nghĩ rằng nó là công bằng để trừng phạt người ở vị trí thứ 2. Tôi không nói rằng bạn phải thưởng cho họ bằng cách upvoting, nhưng downvoting cho ấn tượng rằng câu trả lời là sai, thay vì không kịp thời - TheTXI


Tôi đã viết này rất rất ngắn hướng dẫn sau khi REALLY REALLY thất vọng với REALLY REALLY hướng dẫn dài cos 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 destID@destMachine:/tmp/ #type password

ssh destID@destMachine #type password

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

rm /tmp/id_rsa.pub

2





Putty có một -pw tùy chọn cho phép bạn tạo một shortcut trên desktop như sau:

"C:\Program Files\PuTTY\putty.exe" -ssh user@192.168.2.2 -pw your_password

2