การเข้าถึง AWS ssh ปัญหา 'สิทธิ์ที่ถูกปฏิเสธ (publickey)' [ปิด]


284

วิธีเชื่อมต่อกับอินสแตนซ์ AWS ผ่าน ssh ได้อย่างไร

ฉันมี:

  1. ลงทะเบียนที่ AWS;
  2. สร้างพับลิกคีย์และใบรับรองที่เว็บไซต์ AWS และบันทึกลงดิสก์
  3. ไปที่คอนโซลของฉันและสร้างตัวแปรสภาพแวดล้อม:

    $ export JAVA_HOME=/usr/lib/jvm/java-6-openjdk/
    $ export EC2_CERT=/home/default/aws/cert-EBAINCRNWHDSCWWIHSOKON2YWGJZ5LSQ.pem
    $ export EC2_PRIVATE_KEY=/home/default/aws/pk-EBAINCRNWHDSCWWIHSOKON2YWGJZ5LSQ.pem
    
  4. บอก AWS API เพื่อใช้ keypair นี้และบันทึก keypair เป็นไฟล์:

    $ ec2-add-keypair ec2-keypair > ec2-keypair.pem
    
  5. เริ่มต้นอินสแตนซ์ AWS Ubuntu 9 โดยใช้ keypair นี้:

    $ ec2-run-instances ami-ed46a784 -k ec2-keypair
    
  6. พยายามสร้างการเชื่อมต่อ ssh กับอินสแตนซ์:

    $ ssh -v -i ec2-keypair.pem ubuntu@ec2-174-129-185-190.compute-1.amazonaws.com
    OpenSSH_5.1p1 Debian-5ubuntu1, OpenSSL 0.9.8g 19 Oct 2007
    debug1: Reading configuration data /etc/ssh/ssh_config
    debug1: Applying options for *
    debug1: Connecting to ec2-174-129-185-190.compute-1.amazonaws.com [174.129.185.190] port 22.
    debug1: Connection established.
    debug1: identity file ec2-keypair.pem type -1
    debug1: Remote protocol version 2.0, remote software version OpenSSH_5.1p1 Debian-5ubuntu1
    debug1: match: OpenSSH_5.1p1 Debian-5ubuntu1 pat OpenSSH*
    debug1: Enabling compatibility mode for protocol 2.0
    debug1: Local version string SSH-2.0-OpenSSH_5.1p1 Debian-5ubuntu1
    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 'ec2-174-129-185-190.compute-1.amazonaws.com' is known and matches the RSA host key.
    debug1: Found key in /home/default/.ssh/known_hosts:11
    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
    debug1: Next authentication method: publickey
    debug1: Trying private key: ec2-keypair.pem
    debug1: read PEM private key done: type RSA
    debug1: Authentications that can continue: publickey
    debug1: No more authentication methods to try.
    Permission denied (publickey).
    

    สิ่งที่อาจเป็นปัญหาและวิธีการทำให้มันใช้งานได้?


2
แดกดันคือฉันใช้ "root" เป็นชื่อผู้ใช้ แต่ "Ubuntu" (สิ่งที่คุณพูดถึง) เป็นชื่อที่เหมาะสมสำหรับ AMI ของฉันและขอบคุณสำหรับการโพสต์ของคุณ!
realjin

คำตอบ:


512

สำหรับกรณีของ Ubuntu:

chmod 600 ec2-keypair.pem
ssh -v -i ec2-keypair.pem ubuntu@ec2-174-129-185-190.compute-1.amazonaws.com

สำหรับกรณีอื่น ๆ ที่คุณอาจจะต้องใช้แทนec2-userubuntu

รูปภาพ EC2 Linux ส่วนใหญ่ที่ฉันเคยใช้จะมีผู้ใช้รูทที่สร้างขึ้นตามค่าเริ่มต้นเท่านั้น

ดูเพิ่มเติมที่: http://www.youtube.com/watch?v=WBro0TEAd7g


6
คุณร็อค! มันง่ายมาก!
อเล็กซ์

50
นอกจากนี้คุณยังสามารถใช้ SSH เพิ่ม EC2-keypair.pem เพื่อให้คุณสามารถวาง -i ตัวเลือก
AdamK

12
ถ้าคุณลองรูทและคุณจะได้รับ "กรุณาเข้าสู่ระบบในฐานะผู้ใช้ ec2-user แทนผู้ใช้รูท" "ใช้ec2-userแทนรูท
Tony

8
และบางภาพของอูบุนตูดูเหมือนจะมีผู้ใช้ "อูบุนตู" เท่านั้น (ซึ่งสามารถ sudo ถึง root ได้)
ศ. Falken ผิดสัญญา

1
มีประโยชน์มากที่สุด
NSCoder

93

ตอนนี้มันเป็น:

ssh -v -i ec2-keypair.pem ec2-user@[yourdnsaddress]

ขอบคุณ ฉันใช้ทุกวัยในการค้นหาสิ่งนี้ - ไม่ได้กล่าวถึงในข้อมูลการเชื่อมต่อจากคอนโซล! มันจะบอกคุณเมื่อคุณพยายามใช้รูท แต่ฉันคิดว่าผู้ใช้ ec2 เป็นข้อมูลอ้างอิงถึงชื่อผู้ใช้ของฉัน Doh!
Adrian Mouat

1
โอ้ผู้ชาย ไม่ใช่อาหารอันโอชะที่ง่ายต่อการค้นหา ขอบคุณ!
vroomfondel

ขอบคุณไม่ใช่เรื่องง่ายที่จะหาคนนี้

ดีมาก! ขอบคุณ!
viana

46

การเปิดตัวของ Canonical ใช้ผู้ใช้ 'Ubuntu' โดยค่าเริ่มต้นสำหรับทุกคนที่เชื่อมโยงไปถึงที่นี่ด้วยภาพอูบุนตูที่เกิดขึ้นพร้อมกับปัญหาเดียวกัน


2
ไม่ง่ายที่จะหาอันนี้
กุสตาฟ

17

หากคุณใช้ภาพ Bitnami ให้เข้าสู่ระบบเป็น 'bitnami'

ดูเหมือนจะชัดเจน แต่สิ่งที่ฉันมองข้าม


คำตอบของคุณช่วยชีวิตฉันไว้!
Surya

2
คุณหมายถึงอะไร Seems <sarcasm>obvious</sarcasm>
Bob Stein

คำแนะนำ Bitnamiรวมถึงวิธีค้นหารหัสผ่านฐานข้อมูล
Bob Stein


5

Ubuntu 10.04 กับ openSSH

นี่คือการใช้งานที่แน่นอน:

ssh -v -i [yourkeypairfile] ec2-user@[yourdnsaddress]

ตัวอย่างเช่น:

ssh -v -i GSG_Keypair.pem ec2-user@ec2-184-72-204-112.compute-1.amazonaws.com

ตัวอย่างข้างต้นถูกนำมาโดยตรงจากบทช่วยสอน AWS สำหรับการเชื่อมต่อกับเครื่อง Linux / UNIX ที่: http://docs.amazonwebservices.com/AWSEC2/latest/GettingStartedGuide/


ด้วยสวิตช์ ssh -i เราสามารถใช้ไฟล์. pem เท่านั้น
ABHAY JOHRI

5

นอกจากนี้ยังจะบ่นหากสิทธิ์ไฟล์ pem เปิดเกินไป แก้ไขไฟล์เป็น 600 เพื่อแก้ไข


ขอบคุณสำหรับเคล็ดลับนี้ - ช่วยฉันได้มาก
Billy Moon

4
สำหรับมือใหม่ .. คำสั่งให้ทำเช่นนี้จะเป็น:chmod 600 your_file.pem
dano

5

ฉันยังพบปัญหานี้ - กลายเป็นว่าฉันใช้ AMI ที่สร้างโดยชุมชน - และชื่อผู้ใช้เริ่มต้นคือรูท niehter และไม่เป็น ect-user หรือ ubuntu ในความเป็นจริงฉันไม่รู้ว่ามันคืออะไร - จนกระทั่งฉันลอง ' รูท ' และเซิร์ฟเวอร์ขอให้ฉันลงชื่อเข้าใช้ด้วยxxxโดยที่xxxคือสิ่งที่มันบอกคุณ

-cheers!


4

คุณต้องมีรหัสส่วนตัวในเครื่องของคุณ

คุณต้องรู้ที่อยู่ IP หรือชื่อ DNS ของเครื่องระยะไกลหรือเซิร์ฟเวอร์ของคุณคุณสามารถรับได้จากคอนโซล AWS

หากคุณเป็นผู้ใช้ linux

  • ตรวจสอบให้แน่ใจว่าการอนุญาตบนคีย์ส่วนตัวคือ 600 ( chmod 600 <path to private key file>)
  • เชื่อมต่อกับเครื่องของคุณโดยใช้ ssh ( ssh -i <path to private key file> <user>@<IP address or DNS name of remote server>)

หากคุณเป็นผู้ใช้ windows

  • ใช้ PuTTy เพื่อสร้างเซสชัน ssh ( http://the.earth.li/~sgtatham/putty/latest/x86/putty-0.66-installer.exe )
  • หากไฟล์คีย์ส่วนตัวของคุณอยู่ในรูปแบบ. pem ให้แปลงเป็น. pkk โดยใช้ puttygen
  • เรียกใช้ PuTTy ตั้งค่าไฟล์ ppk ที่อยู่ IP หรือชื่อ DNS ของเซิร์ฟเวอร์ระยะไกลและเริ่มเซสชัน ssh

เปลี่ยนการอนุญาตของไฟล์โดยใช้ chmod 400 <pem key>
Vaibhav Jain

3

ใช้...

# chmod 400 ec2-keypair.pem

อย่าใช้สิทธิ์ 600 มิฉะนั้นคุณอาจเขียนทับรหัสของคุณโดยไม่ได้ตั้งใจ


2

สิ่งนี้ใช้ได้กับฉัน:

ssh-keygen -R <server_IP>

เพื่อลบคีย์เก่าที่เก็บอยู่บนเวิร์กสเตชันยังใช้งานได้แทน

จากนั้นทำ ssh เดียวกันอีกครั้งมันทำงาน:

ssh -v -i <your_pem_file> ubuntu@<server_IP>

บนอินสแตนซ์ของ ubuntu ชื่อผู้ใช้คือ: ubuntu บน Amazon Linux AMI ชื่อผู้ใช้คือ: ผู้ใช้ ec2

ฉันไม่จำเป็นต้องสร้างอินสแตนซ์จากรูปภาพอีกครั้ง



2

มี 2 ​​ขั้นตอนในการเชื่อมต่อ:

Chmod 400 ในคีย์ส่วนตัวของคุณเช่นนี้ผู้อื่นไม่สามารถเข้าถึงคีย์ของคุณ:

chmod 400 toto.pem

ในการเชื่อมต่อกับอินสแตนซ์ของคุณใน SSH คุณจำเป็นต้องทราบที่อยู่ IP สาธารณะของอินสแตนซ์ของคุณ:

ssh -i toto.pem ec2-user@XX.XX.XX.XXX

หวังว่ามันจะช่วย!


1

หากคุณใช้ EBS คุณสามารถลองเมานต์ EBS บนอินสแตนซ์ที่กำลังทำงานอยู่ได้ จากนั้นติดตั้งบนอินสแตนซ์ที่ทำงานนั้นและดูว่าเกิดอะไรขึ้นใน / home คุณสามารถเห็นสิ่งต่าง ๆ เช่นอูบุนตูหรือผู้ใช้ ec2- ผู้ใช้? หรือมีกุญแจสาธารณะที่ถูกต้องภายใต้ ~ / .ssh / authorized_keys



1

หากคุณใช้งานภาพ AWS จาก Bitnami ชื่อผู้ใช้จะเป็น bitnami ไชโย!

ดูการแก้ปัญหาของฉันและดูล่าสุด:

* * * *

ssh -v -i awsliferaysrta.pem.txt root@54.254.250.***
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: Connecting to 54.254.250.*** [54.254.250.***] port 22.
debug1: Connection established.
debug1: identity file awsliferaysrta.pem.txt type -1
debug1: identity file awsliferaysrta.pem.txt-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.9p1 Debian-5ubuntu1.1
debug1: match: OpenSSH_5.9p1 Debian-5ubuntu1.1 pat OpenSSH_5*
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr 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: Server host key: RSA 05:5c:78:45:c9:39:3a:84:fe:f8:19:5d:31:48:aa:5f
debug1: Host '54.254.250.***' is known and matches the RSA host key.
debug1: Found key in /Users/macbookpro/.ssh/known_hosts:2
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: awsliferaysrta.pem.txt
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
Authenticated to 54.254.250.*** ([54.254.250.***]:22).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: Remote: Port forwarding disabled.
debug1: Remote: Agent forwarding disabled.
debug1: Remote: X11 forwarding disabled.
debug1: Remote: Forced command.
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
Please login as the user "bitnami" rather than the user "root".

* * * *


1

ในกรณีของฉัน (Mac OS X) ปัญหาคือประเภทการแบ่งของไฟล์ ลองสิ่งนี้:

1.- เปิดไฟล์. pem ด้วย TextWrangler

2.- ที่ด้านล่างของแอปตรวจสอบว่าประเภทการหยุดพักเป็น "Windows (CRLF)"


1

ผู้ใช้ ec2 สำหรับ Amazon Linux AMI และภาพ Ubuntu สำหรับ Ubuntu นอกจากนี้ RHEL 6.4 และใหม่กว่าผู้ใช้ ec2 RHEL 6.3 และรูตก่อนหน้านี้รูต Centora ของผู้ใช้ ec2 ecos


0

เพียงเพิ่มในรายการนี้ ฉันมีปัญหาในเช้านี้ด้วยผู้ใช้ใหม่เพิ่งเพิ่มไปยังอินสแตนซ์ AWS EC2 ในการตัดการไล่ล่าปัญหาคือselinux (ซึ่งอยู่ในการบังคับใช้โหมด ) พร้อมกับความจริงที่ว่าผู้ใช้ที่บ้านของฉันอยู่ในปริมาณ EBS ใหม่ที่แนบมา อย่างใดฉันคิดว่า selinux ไม่ชอบเล่มอื่น ๆ เอาฉันสักครู่เพื่อคิดออกในขณะที่ฉันมองผ่านทุกปัญหา ssh อื่น ๆ ปกติ (/ etc / ssh / sshd_config ไม่เป็นไรแน่นอนไม่อนุญาตให้ใช้รหัสผ่านสิทธิ์ถูกต้อง ฯลฯ )

การแก้ไข?

สำหรับตอนนี้ (จนกว่าฉันจะเข้าใจวิธีการอนุญาตให้ผู้ใช้ ssh กับไดรฟ์ข้อมูลที่แตกต่างกันหรืออย่างใดทำให้ไดรฟ์ดังกล่าวเป็นจุด dir บ้านโดยสุจริต):

sudo perl -pi -e 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
sudo setenforce 0

แค่นั้นแหละ. ตอนนี้ผู้ใช้ใหม่ของฉันสามารถเข้าสู่ระบบโดยใช้รหัส id_rsa ของเขาเอง


0

มีปัญหาเดียวกัน ปฏิเสธการอนุญาต (publickey) เมื่อพยายามลงชื่อเข้าใช้ด้วย 'ผู้ใช้ ec2' หรือ 'รูท'

ไปที่หมายเลข AMI ของอิมเมจของเครื่องและมีข้อมูลการเข้าสู่ระบบ SSH อยู่ในหน้า Debian wiki

หวังว่านี่จะช่วยได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.