Thêm khóa công khai vào ~ / .ssh / ủy quyền_key không tự động đăng nhập tôi


446

Tôi đã thêm khóa SSH công khai vào tệp ủy quyền . ssh localhostnên đăng nhập tôi mà không yêu cầu mật khẩu.

Tôi đã làm điều đó và thử gõ ssh localhost, nhưng nó vẫn yêu cầu tôi nhập mật khẩu. Có một thiết lập khác mà tôi phải trải qua để làm cho nó hoạt động?

Tôi đã làm theo hướng dẫn để thay đổi quyền:

Dưới đây là kết quả nếu tôi làm ssh -v localhost.

debug1: Reading configuration data /home/john/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to localhost [127.0.0.1] port 22.
debug1: Connection established.
debug1: identity file /home/john/.ssh/identity type 1
debug1: identity file /home/john/.ssh/id_rsa type -1
debug1: identity file /home/john/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_4.7p1 Debian-8ubuntu3
debug1: match: OpenSSH_4.7p1 Debian-8ubuntu3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu3
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-cbc hmac-md5 none
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host 'localhost' is known and matches the RSA host key.
debug1: Found key in /home/john/.ssh/known_hosts:12
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: /home/john/.ssh/identity
debug1: Server accepts key: pkalg ssh-rsa blen 149
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>

Sau đó, nó yêu cầu một mật khẩu sau nhật ký trên. Tại sao nó không đăng nhập tôi mà không có mật khẩu?


5
Mặc dù không phải như vậy ở đây, nếu bạn đến từ Google và bạn đang sử dụng một thư mục nhà được mã hóa, sshd sẽ không thể truy cập được và do đó sẽ không thể đọc tệp ủy quyền của bạn. Đây là một giải pháp: bug.launchpad.net/ubfox/+source/openssh/+orms/362427/comments/ợi
Daniel Schaffer

Câu trả lời:


1097

Bạn cần xác minh các quyền của authorized_keystệp và thư mục thư mục / thư mục mẹ được đặt.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Để biết thêm thông tin xem trang này .

Bạn cũng có thể cần thay đổi / xác minh các quyền của thư mục chính của bạn để xóa quyền truy cập ghi cho nhóm và những người khác.

chmod go-w ~

6
Vâng, một cái gì đó ở trên đã hoạt động, mặc dù không phải là "chmod -R go-wrx foobar" khá ấn tượng? Tại sao cần đệ quy?
joachim

9
Đối với phần thứ hai, nó không cần thiết để làm cho nó đệ quy, chỉ cần làm chmod go-wrx foobarlà đủ. Làm điều đó một cách đệ quy có thể làm nghiêm trọng một số ứng dụng nếu bạn có một số nhóm hoặc quyền truy cập khác vào các tệp, đặc biệt nếu đó là một thư mục web.
StingeyB

24
Như đã đề cập trong Câu hỏi thường gặp về OpenSSH, thư mục home & .ssh của người dùng chỉ cần viết quyền xóa đối với nhóm / người khác (vì vậy chmod go-w $HOME $HOME/.sshsẽ thực hiện thủ thuật). Do đó, quyền có thể là 'mở' là 755 cho cả hai thư mục, nếu bạn quá nghiêng. Các lệnh đơn giản / ít xâm lấn nhất có trong FAQ: openssh.org/faq.html#3,14
davidjb

3
Tại sao nó không làm việc cho tôi cho đến khi tôi làm chmod 700 ~/.ssh && chmod 644 ~/.ssh/authorized_keys? 600 đã không hoạt động trong đó 644 đã làm ...
ficuscr

3
Tôi cũng cần phải sudo chown -R {$USER}:{$USER} ~/.ssh/bởi vì tôi đã viết các authorized_keystập tin như root.
Zane Hooper

155

SELinux cũng có thể khiến ủy quyền_key không hoạt động. Đặc biệt đối với root trong CentOS 6 và 7. Không cần phải tắt nó. Khi bạn đã xác minh quyền của mình là chính xác, bạn có thể sửa lỗi này như sau:

chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
restorecon -R -v /root/.ssh

7
Đây restoreconlà những gì bạn cần sau khi bạn đã sao chép các tệp bằng tay, ví dụ như vào một ổ cứng mới. (Bạn có thể nên chạy nó trên tất cả các tệp trong trường hợp này. Có thể khắc phục các sự cố kỳ lạ khác.)
ospalh

Một người cắm trại hạnh phúc ở đây. Đây là vấn đề của tôi trong RHEL 6.5
Antonio Ortells

2
9/10 lần, một vấn đề "tại sao điều này không hoạt động, nó luôn hoạt động" là một vấn đề selinux.
Andrew White

cố định các vấn đề đối với tôi trên 1and1 (1und1) máy chủ
musicman

104

thiết lập ssh ủy quyền_key có vẻ đơn giản nhưng ẩn một số bẫy tôi đang cố gắng tìm

-- NGƯỜI PHỤC VỤ --

trong / etc / ssh / sshd_config được đặt passwordAuthentication yesđể cho phép máy chủ tạm thời xác thực mật khẩu

- KHÁCH HÀNG -

coi cygwin là mô phỏng linux và cài đặt & chạy openssh

1. tạo khóa riêng và khóa chung (phía máy khách) # ssh-keygen

Ở đây chỉ cần nhấn ENTER, bạn sẽ nhận được các tệp DEFAULT 2 " id_rsa " và " id_rsa.pub " trong ~ / .ssh / nhưng nếu bạn đặt tên_for_the_key, các tệp được tạo sẽ được lưu trong pwd của bạn

2. đặt your_key.pub vào máy đíchssh-copy-id user_name@host_name

nếu bạn không tạo khóa mặc định thì đây là bước đầu tiên sai ... bạn nên sử dụng

ssh-copy-id -i path/to/key_name.pub user_name@host_name

3. ghi nhật ký ssh user_name@host_namesẽ chỉ hoạt động cho id_rsa mặc định, vì vậy đây là bẫy thứ 2 cho bạn cầnssh -i path/to/key_name user@host

(sử dụng tùy chọn ssh -v ... để xem điều gì đang xảy ra)

Nếu máy chủ vẫn yêu cầu mật khẩu thì bạn đã cho smth. để nhập cụm mật khẩu: khi bạn đã tạo khóa (vì vậy nó là bình thường)

nếu ssh không nghe cổng mặc định 22 phải sử dụng ssh -p port_nr

-- NGƯỜI PHỤC VỤ -----

4. sửa đổi / etc / ssh / sshd_config để có

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  %h/.ssh/authorized_keys

(không có trường hợp)

Điều này yêu cầu ssh chấp nhận ủy quyền và tìm trong thư mục nhà của người dùng để tìm key_name được ghi trong tệp .ssh / ủy quyền

5 quyền đặt trong máy đích

chmod 755 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Đồng thời tắt pass auth

passwordAuthentication no

để đóng cổng cho tất cả các ssh root / admin /....@ your_domain

6 đảm bảo quyền sở hữu và quyền sở hữu nhóm của tất cả các thư mục gốc không phải là gốc.

chown -R ~ usernamehere
chgrp -R ~/.ssh/ user 

===============================================

7. xem xét xuất sắc http://www.fail2ban.org

8. thêm ssh TUNNEL để truy cập máy chủ MySQL (bind = 127.0.0.1)


5
Lưu ý rằng "chỉ 4 bảo mật" không chỉ dành cho bảo mật! SSH sẽ bỏ qua tệp nếu nó không có quyền hạn chế.
Navin

Đảm bảo quyền sở hữu sẽ là sự bổ sung tuyệt vời cho danh sách này
steviejay 6/03/2015

1
Tôi không có ý tưởng về ssh-copy-id! Bước đó một mình sẽ làm cho một câu trả lời tuyệt vời.
James Marble

1
chmod 755 ~ / .ssh thay vì 700 mà tôi thấy ở nơi khác dường như làm điều đó
Jim W nói phục hồi lại

36

Ngoài ra, hãy chắc chắn rằng thư mục nhà của bạn không thể ghi bởi người khác

chmod g-w,o-w /home/USERNAME

Câu trả lời bị đánh cắp từ đây


4
Làm chmod 700 ~/.ssh ; chmod 600 ~/.ssh/authorized_keys ; chmod g-w,o-w ~việc cho tôi. Cảm ơn.
gbraad

Tại sao không sử dụng chỉ chmod og-w /home/USERNAMEđể thay thế?
Paramvir Singh Karwal

12

người tuyệt vọng cũng có thể đảm bảo rằng họ không có thêm dòng mới trong tệp ủy quyền do sao chép văn bản id_rsa.pub ra khỏi thiết bị đầu cuối bị nhầm lẫn.


2
Đây chính xác là thứ đã xảy ra với tôi! hai thiết bị đầu cuối có cùng chiều rộng, vì vậy thật khó để tìm ra cho đến khi tôi bật số dòng để xem hai dòng trong tệp ủy quyền.
Shawn

1
Điều này. Tôi chỉ lãng phí một giờ vì điều này. Và đây không phải là lần đầu tiên. Câu trả lời của @ bortunac đề cập đến công cụ ssh-copy-id, mà tôi sẽ sử dụng trong tương lai để tránh điều này.
xdhmoore

7

Xin lưu ý rằng SELinux cũng có thể gây ra lỗi này, ngay cả khi tất cả các quyền có vẻ ổn. Vô hiệu hóa nó đã tạo ra mánh khóe cho tôi (chèn những lời từ chối thông thường về việc vô hiệu hóa nó).


Bạn có thể thấy SELinux can thiệp vào /var/log/audit/audit.log. restorecon -R -v /root/.sshsửa trường hợp cụ thể của tôi.
Dave Goodell

7

người dùng là tên người dùng của bạn

mkdir -p /home/user/.ssh
ssh-keygen -t rsa
touch /home/user/.ssh/authorized_keys
touch /home/user/.ssh/known_hosts
chown -R user:user /home/user/.ssh
chmod 700 /home/user/.ssh
chmod 600 /home/user/.ssh/id*
chmod 644 /home/user/.ssh/id*.pub
chmod 644 /home/user/.ssh/authorized_keys
chmod 644 /home/user/.ssh/known_hosts

Tốt hơn cho root:mkdir -p /home/$USER/.ssh && chown -R $USER:$USER /home/$USER/.ssh && sudo -u $USER ssh-keygen -t rsa && touch /home/$USER/.ssh/authorized_keys && touch /home/$USER/.ssh/known_hosts && chmod 700 /home/$USER/.ssh && chmod 600 /home/$USER/.ssh/id* && chmod 644 /home/$USER/.ssh/id*.pub && chmod 644 /home/$USER/.ssh/authorized_keys && chmod 644 /home/$USER/.ssh/known_hosts && vim /home/$USER/.ssh/authorized_keys # paste keys here!
Odysseus

7

Liệt kê một khóa công khai trong .ssh / ủy quyền là cần thiết, nhưng không đủ để sshd (máy chủ) chấp nhận nó. Nếu khóa riêng của bạn được bảo vệ bằng cụm mật khẩu, bạn sẽ cần cung cấp cho ssh (client) cụm mật khẩu mỗi lần. Hoặc bạn có thể sử dụng ssh-agent hoặc tương đương với Gnome.

Cập nhật của bạn dõi phù hợp với khóa riêng được bảo vệ bằng mật khẩu. Xem ssh-agent, hoặc sử dụng ssh-keygen -p.


5

Viết lệnh:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Sau khi bạn làm điều này, hãy chắc chắn rằng thư mục của bạn là như thế:

drwx------ 2 lab lab 4.0K Mar 13 08:33 .
drwx------ 8 lab lab 4.0K Mar 13 08:07 ..
-rw------- 1 lab lab  436 Mar 13 08:33 authorized_keys
-rw------- 1 lab lab 1.7K Mar 13 07:35 id_rsa
-rw-r--r-- 1 lab lab  413 Mar 13 07:35 id_rsa.pub

1
câu trả lời của bạn khác với câu trả lời như thế nào? Bạn đã viết nó 3 năm sau bằng cách sử dụng lệnh Ctrl + C Ctrl-V của bạn?
stinger

5

Điều cuối cùng đã làm tôi khó khăn là đảm bảo rằng chủ sở hữu / nhóm không phải là root mà là người dùng:

chown -R ~/.ssh/ user
chgrp -R ~/.ssh/ user 

chown: người dùng không hợp lệ: '/home/lsa/.ssh/'
Stepan Yakovenko

3

Hãy thử "ssh-add" làm việc cho tôi.


3

Một mẹo khác để nhớ. Vì v7.0 OpenSSH vô hiệu hóa các khóa ssh DSS / DSA theo mặc định do điểm yếu kế thừa của chúng. Vì vậy, nếu bạn có OpenSSH v7.0 +, hãy đảm bảo rằng khóa của bạn không có ssh-dss.

Nếu bạn bị kẹt với các khóa DSA, bạn có thể bật lại hỗ trợ cục bộ bằng cách cập nhật các tệp sshd_config~/.ssh/configtệp của bạn bằng các dòng như vậy:PubkeyAcceptedKeyTypes=+ssh-dss


3

Trong trường hợp của tôi, tôi cần phải đặt authorized_keystập tin của tôi vào.openssh .

Vị trí này được chỉ định trong /etc/ssh/sshd_configtheo tùy chọn AuthorizedKeysFile %h/.ssh/authorized_keys.


Có cả một loại vấn đề có thể xảy ra trên máy chủ (khi cố gắng kết nối từ máy khách) không thể gỡ lỗi mà không truy cập vào máy chủ ... Đây là do thiết kế để ẩn thông tin khỏi các máy khách độc hại, nhưng làm cho nó khó hơn gỡ lỗi.
qneill

2

Đảm bảo rằng người dùng mục tiêu có một mật khẩu được đặt. Chạy passwd usernameđể thiết lập một. Điều này là bắt buộc đối với tôi ngay cả khi mật khẩu đăng nhập SSH bị vô hiệu hóa.


2

điều này giải quyết vấn đề của tôi

ssh-đại lý bash

ssh-thêm


Giải thích những gì nó làm, xin vui lòng.
lyuboslav kanev

Tác nhân ssh lưu trữ các khóa ssh của bạn .. lệnh bash bắt đầu một phiên bản mới của trình bao. và ssh-add mở khóa của bạn và tải chúng
Julian

2

Một vấn đề khác bạn phải chăm sóc. Nếu tệp được tạo của bạn không mặc định id_rsaid_rsa.pub

Bạn phải tạo tệp .ssh / config và xác định thủ công tệp id nào bạn sẽ sử dụng với kết nối.

Ví dụ ở đây:

host remote_host_name
hostname 172.xx.xx.xx
user my_user
IdentityFile /home/my_user/.ssh/my_user_custom.pub

2
IdentityFile phải là khóa riêng
Ken H

@KenH vâng chắc chắn rồi. đó là lỗi đánh máy xin lỗi vì điều đó.
Kunthar

1

I ban hành sudo chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keyschmod go-w $HOME $HOME/.sshtừ trên cao và nó cố định vấn đề của tôi trên một hộp CentOS7 rằng tôi đã sai lầm các điều khoản trên trong khi cố gắng để có được samba cổ phiếu làm việc. Cảm ơn


1

Có vẻ như một vấn đề cho phép. Thông thường nó sẽ xảy ra nếu sự cho phép của một số tập tin / thư mục không được thiết lập chính xác. Trong hầu hết các trường hợp họ ~/.ssh~/.ssh/*. Trong trường hợp của tôi họ là /home/xxx.

Bạn có thể thay đổi cấp độ nhật ký của sshd bằng cách sửa đổi /etc/ssh/sshd_config (tìm kiếm LogLevel, đặt thành DEBUG), sau đó kiểm tra đầu ra /var/log/auth.logđể xem chính xác những gì đã xảy ra.


3
Điều này trông giống hệt với câu trả lời được chấp nhận và có lẽ nên là một nhận xét về nó, không phải là một câu trả lời. Với một chút đại diện, bạn sẽ có thể gửi bình luận . Cho đến lúc đó, xin vui lòng không sử dụng câu trả lời như một cách giải quyết.
Nathan Tuggy

Xin lỗi, tôi nghĩ đó là cách để giải quyết tất cả các loại câu hỏi này. Bây giờ tôi biết làm thế nào để làm điều đó bây giờ, cảm ơn.
Joey

1

Vấn đề của tôi là AuthorizedKeysFile đã được sửa đổi, khi tự động hóa để điền / etc / ssh / ủy quyền_key chưa được chạy.

$sudo grep AuthorizedKeysFile /etc/ssh/sshd_config
#AuthorizedKeysFile .ssh/authorized_keys
AuthorizedKeysFile  /etc/ssh/authorized_keys/%u

1

Chỉ cần nhìn vào /var/log/auth.log trên máy chủ . Đặt mức độ chi tiết bổ sung với -vv ở phía máy khách sẽ không có ích, vì máy chủ không thể cung cấp quá nhiều thông tin cho kẻ tấn công có thể.


1

Đảm bảo bạn đã sao chép toàn bộ khóa chung vào authorized_keys; các ssh rsatiền tố là cần thiết cho chìa khóa để làm việc.


2
đã sử dụng ssh-copy-id
vishnu

1

bạn cần xác minh các thuộc tính của các tập tin. để chỉ định sử dụng tài sản cần thiết:

$ chmod 600 ~/.ssh/sshKey
$ chmod 644 ~/.ssh/sshKey.pub

1

Nhìn vào /var/log/auth.log vào máy chủ cho các sshdlỗi auth.

Nếu vẫn thất bại, thì hãy chạy sshdmáy chủ ở chế độ gỡ lỗi:

sudo /usr/sbin/sshd -ddd -p 2200

Sau đó kết nối từ máy khách:

ssh user@host -p 2200

Trong trường hợp của tôi, tôi đã tìm thấy phần lỗi ở cuối:

    debug1: userauth_pubkey: test whether pkalg/pkblob are acceptable for RSA SHA256:6bL+waAtghY5BOaY9i+pIX9wHJHvY4r/mOh2YaL9RvQ [preauth]
==> debug2: userauth_pubkey: disabled because of invalid user [preauth]
    debug2: userauth_pubkey: authenticated 0 pkalg ssh-rsa [preauth]
    debug3: userauth_finish: failure partial=0 next methods="publickey,password" [preauth]
    debug3: send packet: type 51 [preauth]
    debug3: receive packet: type 50 [preauth]

Với thông tin này, tôi nhận ra rằng tôi sshd_configđã hạn chế đăng nhập vào các thành viên của sshnhóm. Lệnh sau đã sửa lỗi quyền này:

sudo usermod -a -G ssh NEW_USER

0

trên lưu ý đó, hãy chắc chắn rằng bạn sshd config có -;

PermitRootLogin without-password

đặt như trên, sau đó khởi động lại sshd (/etc/init.d/sshd restart)

đăng xuất và thử đăng nhập lại!

mặc định tôi tin là -;

PermitRootLogin no

0

Trong trường hợp của tôi, đó là vì nhóm người dùng không được đặt trong Cho phép nhóm tệp cấu hình / etc / ssh / sshd_config. Sau khi thêm nó mọi thứ hoạt động tốt.


0

Tôi có thư mục chính ở một vị trí không chuẩn và trong sshdnhật ký tôi có dòng này:

Could not open authorized keys '/data/home/user1/.ssh/authorized_keys': Permission denied

ngay cả khi tất cả các quyền đều ổn (xem các câu trả lời khác).

Tôi đã tìm thấy một giải pháp ở đây: http://arstechnica.com/civis/viewtopic.php?p=25813191&sid=0876f069ec2aa5fdcd691a2e2e7242c2#p25813191

Trong trường hợp cụ thể của tôi:

  • đã thêm một dòng mới trong /etc/selinux/targeted/contexts/files/file_contexts.homedirs:

    • đây là dòng ban đầu cho các thư mục nhà thông thường:

      /home/[^/]*/\.ssh(/.*)? unconfined_u:object_r:ssh_home_t:s0

    • đây là dòng mới của tôi:

      /data/home/[^/]*/\.ssh(/.*)? unconfined_u:object_r:ssh_home_t:s0

  • theo sau là một restorecon -r /data/sshdkhởi động lại


0

Tôi đã có vấn đề này và không có câu trả lời nào khác giải quyết được, mặc dù tất nhiên các câu trả lời khác đều đúng.

Trong trường hợp của tôi, hóa ra rằng /rootchính thư mục (không phải ví dụ /root/.ssh) có quyền sai. Tôi cần:

chown root.root /root
chmod 700 /root

Tất nhiên, những quyền đó phải giống như thế (có thể chmod 770) bất kể. Tuy nhiên, nó đặc biệt ngăn không cho hoạt sshdđộng, mặc dù /root/.ssh/root/.ssh/authorized_keyscả hai đều có quyền và chủ sở hữu chính xác.


0

Tôi gặp vấn đề này khi tôi thêm nhóm người dùng đăng nhập vào một người dùng khác. Giả sử có một người dùng đăng nhập ssh được gọi là userA và một userB không đăng nhập ssh. userA cũng có nhóm userA. Tôi đã sửa đổi userB để có userA nhóm. Dẫn đến hành vi được mô tả, do đó userA không thể đăng nhập mà không có lời nhắc. Sau khi tôi xóa userA nhóm khỏi userB, thông tin đăng nhập không có dấu nhắc hoạt động trở lại.

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.