Tại sao tôi lại bị từ chối cấp phép (công khai) khi sử dụng SSH từ Ubuntu cục bộ đến máy chủ Amazon EC2?


218

Tôi có một phiên bản của một ứng dụng chạy trên đám mây trên phiên bản Amazon EC2 và tôi cần kết nối nó từ Ubuntu cục bộ của mình. Nó hoạt động tốt trên một trong các Ubuntu cục bộ và cả máy tính xách tay. Tôi nhận được thông báo "Quyền bị từ chối (khóa công khai)" khi cố gắng truy cập SSH vào EC2 trên một Ubuntu cục bộ khác. Nó thật lạ đối với tôi.

Tôi đang nghĩ một số vấn đề với cài đặt bảo mật trên Amazon EC2 có quyền truy cập IP hạn chế vào một phiên bản hoặc chứng chỉ có thể cần phải tạo lại.

có ai biết cách giải quyết không?


11
"Nó đã từng làm việc trước đây" - trước những gì ?
womble

Tôi có một ví dụ EC2 Bean Beanalk. Vào tháng 8 năm 2013, giải pháp là truy cập thể hiện với tư cách là người dùng ec2, người dùng đã khiến lỗi Perm Perm Denied (publicKey) biến mất. Viz: ssh -i ./mike-key- Pairoregon.pem ec2-user@ec2-some-address.us-west-2.compute.amazonaws.com. Tất nhiên, bạn phải có tất cả những thứ khác theo stackoverflow.com/questions/4742478/
Khăn

3
Bạn gặp vấn đề này nếu bạn có tên người dùng sai được chỉ định. Các tài liệu aws ( docs.aws.amazon.com/AWSEC2/latest/UserGuide/ ( ) hiện đang đưa ra một ví dụ với tên người dùng ec2-user [ssh -i /path/my-key- Pair.pem ec2-user @ ec2-198 -51-100-1.compute-1.amazonaws.com], trong khi hộp ubfox (cũ) của tôi có tên người dùng là ubfox, vì vậy khi tôi sử dụng ví dụ tôi đã nhận được lỗi này, việc đổi thành tên người dùng chính xác sẽ giải quyết.
david.barkhuizen

@ david.barkhuizen, bình luận của bạn đã giúp tôi. Tôi đã có một vấn đề tương tự; Hóa ra nó phải làm với tên người dùng. Cảm ơn.
NaijaProgrammer 23/03/18

Câu trả lời:


143

Điều đầu tiên cần làm trong tình huống này là sử dụng -vtùy chọn để sshbạn có thể xem loại xác thực nào được thử và kết quả là gì. Điều đó có giúp khai sáng tình hình?

Trong bản cập nhật cho câu hỏi của bạn, bạn đề cập "trên Ubuntu cục bộ khác". Bạn đã sao chép khóa riêng ssh sang máy khác chưa?


2
Tôi đã sao chép khóa riêng ssh sang máy khác như @Greg đề xuất. Nó hoạt dộng bây giờ. Cảm ơn!
Vorleak Chy

3
FYI bạn có thể sử dụng cờ -i để chỉ đường dẫn của các phím mà không cần cài đặt chúng
Jorge Vargas

20
Trong trường hợp của tôi, tôi đã sử dụng bitnami .ami và không nhận ra rằng bạn cần đăng nhập với tên người dùng gọi là bitnami, như : ssh -i <keyfile> bitname@<ec2-address>. Thật không may, -vtùy chọn này không giúp tôi tìm thấy cái này, nhưng nó vẫn rất hữu ích để kiểm tra!
Matt Connolly

7
tốt, trong trường hợp của tôi, tôi đã sử dụng tên người dùng sai. đã sử dụng "ubfox" thay vì "bitnami". như thế này: ssh -i key.pem bitnami @ hostaddress
Lucas Pottersky

3
Một khách hàng tiềm năng tốt cũng chính là nút từ xa, nhìn vào /var/log/auth.log, đôi khi bạn sẽ thấy các thông báo sau: Authentication refused: bad ownership or modes for file /var/lib/jenkins/.ssh/authorized_keyshoặc một cái gì đó khác
Jonas Libbrecht

76

Vì nó không được đề cập rõ ràng, sshd theo mặc định rất nghiêm ngặt về quyền đối với các authorized_keystệp. Vì vậy, nếu authorized_keysthể ghi được cho bất kỳ ai khác ngoài người dùng hoặc có thể được ghi bởi bất kỳ ai khác ngoài người dùng, họ sẽ từ chối xác thực (trừ khi sshd được định cấu hình StrictModes no)

Ý tôi là "có thể ghi được" là nếu bất kỳ thư mục mẹ nào có thể ghi được cho bất kỳ ai khác ngoài người dùng, người dùng được phép sửa đổi các thư mục đó có thể bắt đầu sửa đổi quyền theo cách mà họ có thể sửa đổi / thay thế ủy quyền.

Hơn nữa, nếu /home/username/.sshthư mục không thuộc quyền sở hữu của người dùng và do đó người dùng không có quyền đọc khóa bạn có thể gặp phải sự cố:

drwxr-xr-x 7 jane jane 4096 Jan 22 02:10 /home/jane
drwx------ 2 root root 4096 Jan 22 03:28 /home/jane/.ssh

Lưu ý rằng jane không sở hữu .sshtập tin. Khắc phục sự cố này thông qua

chown -R jane:jane /home/jane/.ssh

Các loại vấn đề về quyền hệ thống tập tin này sẽ không xuất hiện ssh -vvà thậm chí chúng sẽ không hiển thị trong nhật ký sshd (!) Cho đến khi bạn đặt mức nhật ký thành DEBUG.

  • Chỉnh sửa /etc/ssh/sshd_config. Bạn muốn một dòng đọc LogLevel DEBUGở đó một nơi nào đó. Tải lại máy chủ SSH bằng cơ chế do distro cung cấp. ( service sshd reloadtrên RHEL / CentOS / Khoa học.) Tải lại duyên dáng sẽ không bỏ các phiên hiện có.
  • Hãy thử xác thực lại.
  • Tìm ra nơi nhật ký cơ sở xác thực của bạn đi và đọc chúng. (IIRC, /var/log/auth.logtrên các bản phát hành dựa trên Debian; /var/log/securetrên RHEL / CentOS / Khoa học.)

Dễ dàng hơn nhiều để tìm ra những gì đang xảy ra với đầu ra gỡ lỗi bao gồm lỗi quyền hệ thống tập tin. Hãy nhớ hoàn nguyên thay đổi /etc/ssh/sshd_configkhi hoàn thành!


5
Cái bit "có thể ghi được" đó là thứ đã giúp tôi
wmarbut

7
FWIW quyền chính xác cho các tệp chính là 600 (xem tại đây )
Matt Lyons

1
Đúng, tập tin. Trái phép của tôi đã được nhóm ghi lại nên đã từ chối chấp nhận.
MP Aditya

2
Tôi đang đập đầu vào tường! Thư mục người dùng của tôi đã có quyền sai. Cảm ơn bạn!
XJones

4
tương tự với thư mục ~ / .ssh. bạn có thể nhận được thông báo lỗi sau:Authentication refused: bad ownership or modes for directory
Yevgeniy M.

37

Tôi đã nhận được lỗi này, vì tôi quên thêm -ltùy chọn. Tên người dùng cục bộ của tôi không giống như trên hệ thống từ xa.

Điều này không trả lời câu hỏi của bạn, nhưng tôi đã đến đây để tìm câu trả lời cho vấn đề của mình.


25
ssh host -l usergiống như ssh user@host, phải không?
Znarkus

3
@Znarkus vâng, nó giống nhau.
cregox

Phải, điều này đã giải quyết vấn đề của tôi gây ra lỗi "Quyền bị từ chối (khóa công khai)".
Brooks Moses

1
Đây là vấn đề đối với tôi. Tôi đã mong đợi "root" của người dùng hoạt động, nhưng tôi đang sử dụng một hình ảnh Ubuntu EC2 có người dùng mặc định "ubfox".
Cerin

20

Tôi đã nhận được thông báo này trên một ví dụ mới dựa trên Ubuntu AMI. Tôi đã sử dụng tùy chọn -i để cung cấp PEM nhưng nó vẫn hiển thị "Quyền bị từ chối (khóa công khai)".

Vấn đề của tôi là tôi đã không sử dụng đúng người dùng. Bằng cách chạy ssh với ubfox @ ec2 ... nó hoạt động như bình thường.


Vâng ... Tôi đã chạy lệnh với sudo, đó là lý do tại sao nó không hoạt động.
thaddeusmt

16

Một cái gì đó dễ đọc hơn ssh -v(theo ý kiến ​​của tôi tất nhiên), là tail -f /var/log/auth.log. Điều đó nên được chạy trên máy chủ mà bạn đang cố gắng kết nối, trong khi cố gắng kết nối. Nó sẽ hiển thị lỗi trong văn bản thuần túy.

Điều này giúp tôi giải quyết vấn đề của mình:

Người dùng [tên người dùng] từ xx.yy.com không được phép vì không có nhóm người dùng nào được liệt kê trong Allowgroup


Đây là nhật ký máy chủ. cho RHEL / CentOS 7:tail -f /var/log/secure
Gianfranco P.

10

Kiểm tra tệp / etc / ssh / sshd_config của bạn . Ở đó, tìm dòng nói

PasswordAuthentication no

Dòng đó cần được sửa đổi để nói có thay vì không. Ngoài ra, khởi động lại máy chủ sshd sau đó.

sudo /etc/init.d/ssh restart

18
Điều đó sẽ làm cho máy chủ kém an toàn.
Znarkus

Đây là vấn đề tôi gặp phải: Tôi muốn thiết lập một tài khoản cho một người dùng khác, xác thực chỉ bằng một mật khẩu. Tôi cũng muốn có thể đăng nhập một mình từ những nơi mà tôi không có khóa riêng của mình.
Daniel

1
Làm thế nào chúng ta có thể đi đến /etc/ssh/sshd_config- nếu chúng ta thậm chí không thể vào được máy chủ?
kyo

Để vào chính máy chủ, bạn phải sử dụng tệp PEM mà họ đã đưa ra khi bạn tạo cá thể. Các hướng dẫn đi sau đó.
Sudipta Chatterjee

Điều này làm việc cho tôi, mặc dù khởi động lại sshd yêu cầu lệnh sau:sudo service sshd reload
pacoverflow

6

Có lẽ không liên quan đến poster hiện tại, nhưng có thể giúp những người khác tìm thấy điều này khi tìm kiếm câu trả lời cho các tình huống tương tự. Thay vì để Amazon tạo cặp khóa ssh, tôi khuyên bạn nên tải khóa ssh công khai, tiêu chuẩn, mặc định của riêng bạn lên Amazon và chỉ định rằng khi bạn chạy phiên bản EC2.

Điều này cho phép bạn bỏ cú pháp loại "-i" trong ssh, sử dụng rsync với các tùy chọn tiêu chuẩn và cũng cho phép bạn sử dụng cùng một khóa ssh trên tất cả các vùng EC2.

Tôi đã viết một bài viết về quá trình này ở đây:

Tải khóa ssh cá nhân lên Amazon EC2
http://alatural.com/2010/10/ec2-ssh-keys


+1 Đã tìm kiếm câu hỏi này chính xác cho lý do này.
John Riselvato

tôi thấy lỗi này trong bài viết của bạn khu vực = $ (ec2-mô tả-khu vực | cắt -f2) Tùy chọn bắt buộc '-K, --private-key KEY' bị thiếu (-h để sử dụng)
KashifAli

@KashifAli Bạn sẽ muốn thiết lập thông tin đăng nhập công cụ dòng lệnh API EC2 để bạn không phải luôn luôn chuyển thông tin đăng nhập trên mỗi dòng lệnh.
Eric Hammond

5

Thật kỳ lạ, vấn đề của tôi hóa ra là máy chủ đã được khởi động lại và nó đã được cấp một tên DNS mới. Tôi đã sử dụng tên DNS cũ. Tôi biết điều này nghe có vẻ ngu ngốc nhưng tôi phải mất một thời gian để tìm ra điều này.


Cảm ơn bạn! Đây chính xác là vấn đề của tôi. Tôi đã không nhận ra tên DNS đã thay đổi khi bạn khởi động lại một thể hiện.
Tim Swast

Trong trường hợp của tôi, URL * .compute.amazonaws.com đã thay đổi khi tôi gán IP đàn hồi.
Gian hàng Geoffrey

2

Nếu bạn đang cố gắng kết nối với điện thoại CyanogenMod chạy Dropbear, bạn nên chạy các dòng sau để đảm bảo mọi thứ đều được phép:

chmod 600 /data/dropbear/.ssh/authorized_keys

hoặc là

chmod 700 /data/dropbear/.ssh/authorized_keys # In case of MacOS X 10.6-10.8

chmod 755 /data/dropbear/ /data/dropbear/.ssh

Điều này đã sửa nó cho tôi, nếu không không có gì có thể kết nối.


"khi cố gắng truy cập SSH đến EC2 trên một Ubuntu cục bộ khác."
Grammargeek

1
Điều gì xảy ra nếu tôi không có ủy quyền ?
IgorGanapolsky

2

Nếu bạn đang sử dụng CentOS 5, bạn có thể muốn thiết lập StrictModes notrong /etc/ssh/sshd_config. Tôi đang chia sẻ / thư mục chính bằng NIS / NFS và tôi đặt tất cả các quyền chính xác, nhưng nó luôn nhắc tôi với mật khẩu. Sau khi tôi đặt StrictModes no, vấn đề biến mất!


1

Câu trả lời của Greg giải thích làm thế nào để giải quyết vấn đề tốt hơn, tuy nhiên vấn đề thực tế là bạn có khóa ssh được đặt ở một bên của giao dịch (máy khách), đang thử xác thực khóa công khai thay vì xác thực dựa trên mật khẩu. Vì bạn không có khóa công khai tương ứng trên phiên bản EC2, điều này sẽ không hoạt động.


2
Làm thế nào để bạn giải quyết vấn đề?
Julien Grenier

1

Tôi cũng gặp vấn đề tương tự và sau khi thử hàng tấn giải pháp không hoạt động, tôi đã mở cổng SSH trên tường lửa của bộ định tuyến (bảng điều khiển tường lửa của bộ định tuyến của tôi là một mớ hỗn độn, vì vậy thật khó để biết chuyện gì đang xảy ra). Dù sao, nó đã sửa nó :)

Siêu khó chịu mà lỗi bạn nhận được là Quyền bị từ chối, ngụ ý rằng có một loại kết nối được thực hiện, grr.


1

Tôi đã có cùng một vấn đề mặc dù tôi đã phải tuân theo tất cả các bước bao gồm

$ ec2-authorize default -p 22

Tuy nhiên, tôi đã bắt đầu ví dụ của mình ở khu vực phía tây-1. Vì vậy, lệnh trên cũng nên xác định rằng.

$ ec2-authorize default -p 22 --region us-west-1

Sau lệnh này tôi đã có thể ssh vào ví dụ. Tôi đã dành một chút thời gian trước khi tôi nhận ra vấn đề và hy vọng bài đăng này giúp đỡ người khác.


0

Đây là một trường hợp hiếm gặp, nhưng nếu bạn đã bật selinux và bạn đang sử dụng nfs cho thư mục với ủy quyền (ví dụ: thư mục chung được chia sẻ), bạn sẽ cần phải tắt selinux (không được khuyến nghị vì lý do bảo mật, nhưng bạn có thể tạm thời tắt nó để xem nếu điều này gây ra sự cố) hoặc cho phép selinux sử dụng các thư mục nhà nfs. Tôi không rõ về các chi tiết, nhưng điều này làm việc cho tôi setsebool -P use_nfs_home_dirs 1


0

Tôi vừa gặp vấn đề tương tự sau khi vô tình thêm quyền ghi nhóm vào thư mục chính của người dùng.

Tôi phát hiện ra đây là nguyên nhân do chạy tail -f /var/log/securetrên máy và thấy lỗi Authentication refused: bad ownership or modes for directory /home/<username>.

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.