Đang cố gắng SSH vào một phiên bản Amazon Ec2 - lỗi cấp phép


745

Đây có lẽ là một câu hỏi đơn giản ngu ngốc đối với một số người :)

Tôi đã tạo một phiên bản linux mới trên Amazon EC2 và là một phần trong đó đã tải xuống tệp .pem để cho phép tôi đăng nhập SSH.

Khi tôi cố gắng ssh với:

ssh -i myfile.pem <public dns>

Tôi đã nhận:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'amazonec2.pem' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: amazonec2.pem
Permission denied (publickey).

Sau bài đăng này, tôi đã cố gắng chmod +600 tệp pem, nhưng bây giờ khi tôi ssh tôi chỉ nhận được:

Permission denied (publickey).

Tôi đang làm gì ở trường con trai? Tệp .pem nằm trong thư mục nhà của tôi (trong osx). Các quyền của nó trông như thế này:

-rw-------@   1 mattroberts  staff    1696 19 Nov 11:20 amazonec2.pem

2
Lỗi này cũng xuất hiện khi bạn đang sử dụng tập tin pem sai.
Rahul Prasad

Đồng thời đảm bảo rằng bạn đã tạo cá thể SAU KHI bạn đã tạo và chọn cặp khóa làm khóa được chỉ định để sử dụng. Tôi đã làm điều này theo cách khác xung quanh.
Gary

Tôi đang ở trong Windows với WinSCP. Có gì để làm với chmod 400 myfile.pemkhi nó sử dụng myfile.ppkđược tạo ra bởi PuTTYgen từ tập tin pem.
Chetabahana

Lỗi này cũng có thể xảy ra khi bạn không đăng nhập đúng người dùng;)
andrea06590

Câu trả lời:


1461

Vấn đề là có mod sai trên tập tin.

Dễ dàng giải quyết bằng cách thực hiện -

chmod 400 mykey.pem

Lấy từ hướng dẫn của Amazon -

Tệp khóa của bạn không được xem công khai để SSH hoạt động. Sử dụng lệnh này nếu cần: chmod 400 mykey.pem

400 bảo vệ nó bằng cách làm cho nó chỉ đọc và chỉ cho chủ sở hữu.


3
Cám ơn rất nhiều! Chmod 400 làm gì? đến mykey.pem?
Costa

19
400 bảo vệ nó bằng cách làm cho nó chỉ đọc và chỉ cho chủ sở hữu.
Kof

1
Sau này tôi nhận được "Cảnh báo: Tệp nhận dạng blabla.pem không truy cập được: Không có tệp hoặc thư mục như vậy" khi tôi thực hiện ssh -l USERNAME_HERE -i .ssh / yourkey.pem public-ec2-host.
coolcool1994

3
Lệnh này + đã ssh -i YOUR_PEM_FILE.pem ec2-user@YOUR_IPsửa lỗi. Có lẽ đây nên là câu trả lời được chấp nhận ...
c4k

1
Làm thế nào tôi có thể chạy tương tự cho các cửa sổ?
Ahsan Mukhtar

262

Bạn có thể sử dụng tên người dùng sai để đăng nhập:

  • hầu hết các hình ảnh Ubuntu đều có người dùng ubuntu
  • AMI của Amazon là ec2-user
  • hầu hết các hình ảnh Debian đều có roothoặcadmin

Để đăng nhập, bạn cần điều chỉnh lệnh ssh của mình:

ssh -l USERNAME_HERE -i .ssh/yourkey.pem public-ec2-host

HTH


30
hoặc ssh -i key.pem
ub

43
Thông báo lỗi nói lên tất cả: tệp chứng chỉ .pem không được bảo vệ đủ. Làm chmod 400 xyz.pem như đề xuất dưới đây.
allprog

1
@allprog đối với tôi điều này chỉ khiến nó nói Permission denied (publickey).và không có gì khác ...
Aram Kocharyan

1
Tôi đã tìm thấy sự cố - Tôi đã không sử dụng cùng khóa mà tôi đã tạo ví dụ với
Aram Kocharyan

12
Đây không phải là giải pháp - quyền truy cập tệp trên tệp khóa được tải xuống là 844 theo mặc định. Nên là 400 chmod 500 <path_to_pem_file>nên làm.
Elad Meidar

62

Tôi biết điều này rất muộn với trò chơi ... nhưng điều này luôn làm việc với tôi:

bước 1

ssh-add ~/.ssh/KEY_PAIR_NAME.pem

bước 2, chỉ cần ssh trong :)

ssh user_name@<instance public dns/ip>

ví dụ

ssh ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com

hy vọng điều này sẽ giúp ai đó.


"ssh-add" có giống như chỉ sao chép tệp * .pem vào thư mục ~ / .ssh không?
ア レ ッ ス

1
>> chỉ sao chép tệp * .pem vào thư mục ~ / .ssh Không giống nhau, bạn phải thêm vào thư mục và sau đó chạy lệnh ssh-add.
super_p

Trò chơi rất muộn, nhưng để thêm một số làm rõ ... 1. thêm tệp .pem vào thư mục ~ / .ssh (tạo nó nếu cần thiết), 2. sử dụng lệnh ssh-add để thêm danh tính vào xác thực đặc vụ; điều này có nghĩa là không bao giờ phải chỉ định tệp .pem khi sử dụng ssh
Ian Atkin

2
Sau ssh-add / .ssh / key.pem; Nhận lỗi Không thể mở kết nối đến đại lý xác thực của bạn. ssh-agent -sbáo cáo eval SSH_AGENT_PID = 3409; ssh-add đưa ra lỗi tương tự như trên ......... Bất kỳ trợ giúp nào ở đây plz
Tariq

Ồ, điều đó sẽ rất thuận tiện cho tất cả các kết nối trong tương lai của tôi với VPS của tôi. Cảm ơn bạn đời :)
Ahmad Mushtaq

36

Được rồi, điều duy nhất làm việc cho tôi là:

  1. Thay đổi quyền của khóa

    chmod 400 mykey.pem

  2. Đảm bảo đăng nhập bằng ec2-user và đúng địa chỉ ec2-99 .... Địa chỉ ec2-99 nằm ở cuối bảng điều khiển aws khi bạn đăng nhập và thấy cá thể của bạn được liệt kê

    ssh -i mykey.pem ec2-user@ec2-99-99-99-99.compute-1.amazonaws.com


Tôi không thể tìm thấy địa chỉ ec2-99. Bạn có thể giúp tôi không?
Adil Malik

1
chmod 400 mykey.pem đăng nhập bằng ubfox như sau: ssh -i mykey.pem ubfox@SERVER.amazonaws.com
Gal Bracha

27

Hãy xem bài viết này . Bạn không sử dụng DNS công cộng mà thay vào đó là biểu mẫu

ssh -i your.pem root@ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com

tên hiển thị trên bảng AMI của bạn


Chúc mừng cho bài viết, rất hữu ích!
Matt Roberts

cải thiện nhỏ: khi cố gắng đăng nhập bằng root aws sẽ nhắc như sau: "Vui lòng đăng nhập với tư cách là người dùng ec2 chứ không phải người dùng root."
Andre Schweighofer

Làm cách nào để tìm hiểu ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com của tôi là gì?
ア レ ッ ス

Bảng điều khiển quản lý> EC2> Trường hợp và chọn phiên bản của bạn.
đổi lại

'Root @' là những gì mọi người khác đang thiếu trong câu trả lời này. Bạn đã giúp đỡ! Đó, và chmod.
chúaB8r


13

Trong các cửa sổ, bạn có thể đi đến các thuộc tính của tệp pem và chuyển đến tab bảo mật, sau đó đến nút nâng cao.

loại bỏ sự kế thừa và tất cả các quyền. sau đó cấp cho mình toàn quyền kiểm soát. sau khi tất cả SSL sẽ không cung cấp cho bạn cùng một lỗi một lần nữa.


7

Tôi biết câu hỏi này đã được trả lời nhưng đối với những người đã thử tất cả và bạn vẫn nhận được "Quyền bị từ chối (khóa công khai)" gây phiền nhiễu. Hãy thử chạy lệnh của bạn với SUDO. Tất nhiên đây là giải pháp tạm thời và bạn nên đặt quyền chính xác nhưng ít nhất điều đó sẽ cho phép bạn xác định rằng người dùng hiện tại của bạn không chạy với các đặc quyền bạn cần (như bạn giả định)

sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com

Khi bạn làm điều này, bạn sẽ nhận được một tin nhắn như thế này:

Please login as the user "ec2-user" rather than the user "root"

Cái nào cũng thưa thớt. Trong trường hợp đó, chỉ cần làm điều này:

sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com -l ec2-user

Và bạn sẽ nhận được vinh quang:

   __|  __|_  )
   _|  (     /   Amazon Linux AMI
  ___|\___|___|

2
Cảm ơn .. Tôi vẫn nhận được lỗi sau khi thử tất cả các tùy chọn được đề cập ở trên. Chạy ssh với sudo làm việc cho tôi.
Gursharan Singh

Tôi muốn biết lý do tại sao tôi phải chạy nó trong sudo. Tôi đã thử chmod 400 xyz.pem, nhưng không được.
Samuel Toduez

6

Trong thiết bị đầu cuối Mac, thực hiện "chmod 400 xyz.pem" không giúp tôi, nó liên tục cho phép bị từ chối. Đối với người dùng Ubuntu, tôi sẽ đề nghị

  1. ssh-add xyz.pem
  2. ssh -i xyz.pem ubuntu@ec2-54-69-172-118.us-west-2.compute.amazonaws.com (chú ý người dùng là Ubuntu)

4

Khóa SSH và quyền thực hành tốt nhất cho tệp:

  • thư mục .ssh - 0700 (chỉ theo chủ sở hữu)
  • khóa riêng tư / tệp .pem - 0400 (chỉ đọc bởi chủ sở hữu)
  • khóa công khai / tệp .pub - 0600 (chỉ đọc và ghi bởi chủ sở hữu)

    chmod XXXX file/directory


3

ssh -i /.pem user @ host-machine-IP

Tôi nghĩ đó là bởi vì hoặc bạn đã nhập sai thông tin hoặc, bạn đang sử dụng khóa chung thay vì khóa riêng hoặc, quyền truy cập cổng của bạn được mở cho TẤT CẢ để ssh. Điều này là xấu cho Amazon.


3

Đăng nhập thay thế bằng PuTTY. Nó tốt nhưng cần một vài bước.

  1. Nhận .pem của bạn đã được tạo khi bạn tạo phiên bản EC2 lần đầu tiên.
  2. Chuyển đổi tệp .pem .ppk bằng PuttyGen vì PuTTY không đọc .pem.
  3. Mở PuTTY và nhập Tên máy chủ của bạn là tên người dùng của bạn + DNS công cộng (Ví dụ: ubfox@ec2-xxx-xxx-xxx-xxx.region.compute.amazonaws.com). Không phải tên người dùng tài khoản AWS của bạn.
  4. Sau đó điều hướng đến Kết nối> SSH> Auth . Sau đó thêm tệp .ppk của bạn . Nhấp vào Duyệt nơi có thông báo "Tệp khóa riêng để xác thực" .
  5. Nhấp vào Mở và bạn sẽ có thể thiết lập ngay kết nối.

Tôi đang sử dụng PuTTY 0,66 trong Windows.


Điều này hoạt động, nhưng có cách nào để kết nối ssh hoạt động trực tiếp từ dòng lệnh không?
Ariel

3

Ngoài các câu trả lời khác, đây là những gì tôi đã làm để làm việc này:

  • Sao chép khóa vào thư mục .ssh nếu bạn vẫn chưa có:

cp key.pem ~/.ssh/key.pem

  • Cấp quyền thích hợp cho khóa

chmod 400 ~/.ssh/key.pem

eval `ssh-agent -s` ssh-add

  • Sau đó, thêm khóa

ssh-add ~/.ssh/key.pem

Bây giờ bạn sẽ có thể ssh EC2 (:


2

Thực hiện một chmod 400 yourkeyfile.pem Nếu ví dụ của bạn là Amazon linux thì hãy sử dụng ssh -i yourkeyfile.pem ec2-user @ ip cho ub Ubuntu ssh -i yourkeyfile.pem ub Ubuntu @ ip cho centos ssh -i yourkeyfile.pem centos @ ip


2

Có thể có ba lý do đằng sau lỗi này.

  1. Bạn đang sử dụng một khóa sai.
  2. Khóa của bạn không có quyền chính xác. Bạn cần phải chmod nó đến 400.
  3. Bạn đang sử dụng sai người dùng. Hình ảnh Ubuntu có người dùng Ubuntu , AMI của Amazon là người dùng ec2 và hình ảnh debian có quyền root hoặc quản trị viên

2

Vấn đề đối với tôi là tệp .pem của tôi nằm trong một trong các phân vùng NTFS. Tôi đã chuyển nó vào phân vùng linux của mình (ext4).

Đã cấp quyền yêu cầu bằng cách chạy:

chmod 400 my_file.pem

Va no đa hoạt động.


2

Chà, nhìn vào mô tả bài viết của bạn tôi cảm thấy có 2 lỗi bạn đã làm: -

  1. Đặt quyền chính xác cho khóa riêng . Lệnh dưới đây sẽ giúp bạn thiết lập hoán vị tập tin chính xác.

    chmod 0600 mykey.pem

  2. Sai người dùng ec2 bạn đang cố gắng đăng nhập .

    Nhìn vào nhật ký gỡ lỗi của bạn, tôi nghĩ rằng bạn đã sinh ra một phiên bản linux của Amazon. Người dùng mặc định cho loại thể hiện đó là ec2-user. Nếu ví dụ đó là ubfox thì người dùng mặc định của bạn sẽ là ubuntu.

    ssh -i privatekey.pem default_ssh_user@server_ip

Note:
   For an Amazon Linux AMI, the default user name is ec2-user.

   For a Centos AMI, the default user name is centos.

   For a Debian AMI, the default user name is admin or root.

   For a Fedora AMI, the default user name is ec2-user or fedora.

   For a RHEL AMI, the default user name is ec2-user or root.

   For a SUSE AMI, the default user name is ec2-user or root.

   For an Ubuntu AMI, the default user name is ubuntu.

   Otherwise, if ec2-user and root don't work, check with the AMI provider.

nguồn: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html


1

Danh mục:

  1. Bạn có đang sử dụng đúng tệp .pem khóa riêng không?

  2. Các quyền của nó có được đặt chính xác không? (AMI thương hiệu Amazon của tôi hoạt động với 644, nhưng mũ đỏ phải có ít nhất 600 hoặc 400. Không biết về Ubuntu.)

  3. Bạn đang sử dụng đúng tên người dùng trong dòng ssh của bạn? Amazon-brand = "ec2-user", Red Hat = "root", Ubuntu = "ubfox". Người dùng có thể được chỉ định là "ssh -i pem usename @ hostname" HOẶC "ssh -l tên người dùng -i pem tên máy chủ"


1

Chỉ cần thay đổi quyền của tệp pem thành 0600 chỉ cho phép người dùng được phép và nó sẽ hoạt động như bùa mê.

sudo chmod 0600 myfile.pem

Và sau đó cố gắng để ssh nó sẽ hoạt động hoàn hảo.

ssh -i myfile.pem <<ssh_user>>@<<server>>

1

Theo sự cho phép mặc định không cho phép khóa pem. Bạn chỉ cần thay đổi sự cho phép:

chmod 400 xyz.pem

và nếu ví dụ Ubuntu thì kết nối bằng:

ssh -i xyz.pem ubfox@ec2-youraws.amazonaws.com


1

Không thể xem công khai tệp chính vì vậy hãy sử dụng quyền 400

chmod 400 keyfile.pem

Nếu lệnh trên hiển thị lỗi cho phép sử dụng

sudo chmod 400 keyfile.pem

Bây giờ ssh vào máy ec2, nếu bạn vẫn gặp sự cố, hãy sử dụng người dùng ec2

ssh -i keyfile.pem ec2-user@ec2-12-34-56-78.compute-1.amazonaws.com


1

.400 bảo vệ nó bằng cách làm cho nó chỉ đọc và chỉ cho chủ sở hữu.
Bạn có thể tìm thấy câu trả lời từ hướng dẫn ASW.

chmod 400 yourPrivateKey.pem

nhập mô tả hình ảnh ở đây


0

Sau đây là các bước đơn giản để người dùng Linux kết nối với máy chủ bằng tệp .pem:

Bước 1: Đến vị trí của tệp pem và sao chép nó vào vị trí .ssh.

cp example.pem ~/.ssh/example.pem

Bước 2: Thay đổi quyền

chmod 400 ~/.ssh/example.pem

Bước 3: Chạy lệnh sau

ssh -i ~/.ssh/example.pem ec2-user@host.com

Vì lệnh này quá dài nên bạn phải tạo bí danh cho lệnh này bằng các lệnh sau:

 vim ~/.bashrc

Viết lệnh tương tự theo cách sau đây.

alias sshConnect='ssh -i ~/.ssh/example.pem ec2-user@host.com'

Bây giờ khởi động lại hệ thống của bạn và sử dụng sshConnectđể kết nối với máy chủ của bạn.


0

Nó chỉ là một vấn đề cấp phép với khóa pem aws của bạn.

Chỉ cần thay đổi quyền của khóa pem thành 400 bằng lệnh bên dưới.

chmod 400 pemkeyname.pem

Nếu bạn không có quyền thay đổi quyền của tệp, bạn có thể sử dụng lệnh sudo như bên dưới.

sudo chmod 400 pemkeyname.pem

Tôi hy vọng điều này sẽ làm việc tốt.


0

Tôi đã thấy hai lý do đằng sau vấn đề này

1) khóa truy cập không có quyền. Các khóa pem với sự cho phép mặc định không được phép tạo kết nối an toàn. Bạn chỉ cần thay đổi sự cho phép:

chmod 400 xyz.pem

2) Đồng thời kiểm tra xem bạn đã đăng nhập bằng thông tin xác thực người dùng phù hợp chưa. Nếu không, sử dụng sudo trong khi kết nối

sudo ssh -i {keyfile} ec2-user @ {địa chỉ ip của máy chủ từ xa}


0

Khóa của bạn không được xem công khai để SSH hoạt động. Sử dụng lệnh này nếu cần:

chmod 400 Interview-apps.pem

Connect to your instance using its Public DNS:

ec2-**-***-***-***.us-west-2.compute.amazonaws.com

Thí dụ:

ssh -i "Interview-apps.pem" ec2-user@ec2-**-***-***-***.us-west-2.compute.amazonaws.com

0

Vui lòng bỏ qua câu trả lời này nếu nó không liên quan đến bạn, nhưng từ kinh nghiệm của tôi, tôi đã thấy mọi người gặp vấn đề Permission denied (publickey)vì họ chỉ đơn giản dán khóa công khai của họ (trên máy mục tiêu) mà không có chữ cái đầu tiên !

Điều này xảy ra khi sử dụng vim để chỉnh sửa (dán) phím. Vì vim theo mặc định mở trong chế độ lệnh (không phải ở chế độ chèn ), việc dán phím mà không chuyển sang chế độ chèn (nghĩa là i) sẽ dẫn đến bỏ qua schữ cái đầu tiên , ví dụ thay vì

ssh-rsa <key>

bạn kết thúc dán

sh-rsa <key>

Vì vậy, trước khi thử các giải pháp khác, hãy xem bạn đã dán khóa chính xác chưa ! I E

cat ~/.ssh/id_rsa.pub

Chỉ khi bạn chắc chắn, thực hiện các bước tiếp theo; cố gắng ssh trong chế độ dài dòng (tức là cờ -v) có thể chỉ cho bạn vấn đề thực tế:

ssh -v -i <private_key> <name>@<ip> -p <port>

Như một lưu ý phụ, như đã được đề cập ở đây bởi những người khác, trong phần lớn các trường hợp bắt đầu một tác nhân ssh trống (chương trình giữ các khóa của bạn trong bộ nhớ) và thêm khóa của bạn sẽ giải quyết vấn đề:

ssh-agent bash
ssh-add <private_key>

-1

Điều đã khắc phục điều này đối với tôi là di chuyển tệp .pem trong thư mục ứng dụng. Soo nói fooapp là tên ứng dụng của tôi. Tôi đặt nó trực tiếp ở đó.


-2

Đôi khi có thể có một lỗi trong thư mục. Tôi không biết tại sao...

Bạn có thể thay đổi thư mục và thử lại. Ví dụ: bạn có thể thử nghiệm trong các thư mục thông thường (Máy tính để bàn, Tải xuống và vv).

Tôi đã thử phương pháp này và làm việc


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.