web-dev-qa-db-de.com

Verbindung zu meiner laufenden Amazon EC2-Instanz abgelehnt

Ich habe eine Micro-ec2-Instanz erstellt. Installierte alle nötige Web-Software, MySQL und Git. Aus dieser Instanz ein AMI erstellt. Da bei dieser Instanz EBS als Root-Gerät verwendet wurde, wurde beim Erstellen meiner AMI auch ein EBS-Snapshot erstellt. 

Ich habe diese laufende Instanz beendet. Ich habe dann versucht, eine Instanz aus diesem Amazon-Computer-Image (AMI) zu erstellen. Die neue Instanz wurde zusammen mit einem neuen EBS-Volume gestartet, das an die Instanz angehängt wurde. 

Wenn ich jetzt mein Schlüsselpaar verwende, um mich bei dieser Instanz über meinen SSH-Schlüssel bei seiner öffentlichen DNS-Adresse mit einem Befehl als anzumelden

ssh -i aws/mykey.pem [email protected]

es sagt 

ssh: connect to Host <thepublickdnsname> port 22: Connection refused

Warum passiert dies. Ich konnte über SSH mit den gleichen Schlüsseln eine Verbindung zu meiner ersten Instanz herstellen. Jetzt ist die neue Instanz die exakte Kopie und ich kann mich nicht anmelden. Hilfe dazu ...? Fehlt mir etwas?

Ich habe dieselben Schlüsselpaare verwendet, um die zweite neue Instanz aus dem AMI zu erstellen.

25
Anand

Ich habe festgestellt, dass es eine variable Zeit dauert, bis eine EC2-Instanz gestartet und initialisiert wird. Eine ist die Zeit zwischen dem Aufruf von ec2-run-instance bis der Instanzstatus von "pending" in "running" wechselt. Danach gibt es zusätzliche Zeit, wenn der SSH-Server bereit ist. Diese Zeit kann einige Minuten dauern. 

16
OutputLogic

Ich hatte das gleiche Problem: Mein Problem war, dass ich ein Volume an meine Instanz angehängt hatte. Dann löste ich das Volume und löschte es. Ich folgte aws docs , um meine Instanz zu mounten, und bearbeitete/etc/fstab. Dies war das Problem: Wenn das Volume getrennt wird und Sie versuchen, die Instanz neu zu starten (oder zu stoppen und zu starten), geht es in diese Datei und versucht, das nicht vorhandene Volume anzuhängen. Der ssh-Daemon wird nicht gestartet.

Die Lösung ist: Ich musste eine weitere Instanz erstellen, das Volume von der problematischen Instanz trennen und dann die Datei mount_point/etc/fstab so bearbeiten, dass die Zeile kommentiert wird, in der versucht wird, die nicht vorhandene Instanz bereitzustellen, das neu zuordnende Volume an die problematische Instanz und dann hat alles geklappt.

9

Dies ist wahrscheinlich nicht die Antwort auf die ursprüngliche Frage. Da sich Google jedoch bei Verbindungsproblemen mit EC2 ganz oben befindet, müssen Sie Ihre Sicherheitsgruppe so konfigurieren, dass SSH2 von Ihrem Computer aus zugelassen wird:

http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/AccessingInstances.html#authorizing-access-to-aninstance

6

AWS benötigt Zeit, um eine Instanz von AMI aufzurufen. Wenn Sie versuchen, zu schnell und zu häufig eine Verbindung herzustellen, kann die Box nicht antworten. Das vollständige Skript unten startet eine AMI, ermittelt die IP-Adresse und wartet, bis das System bereit ist, eine Verbindung herzustellen. Für Spot-Instanzen, die nahe oder unter den aktuellen Preisen liegen, würde dies sehr gut funktionieren, da die für die Verbindung erforderliche Zeit stark variieren kann.

Die folgende Schleife verursachte einen Verbindungsabweisungsfehler, als die sleep-Anweisung auskommentiert wurde und sie zu schnell nach dem Starten der Instanz begann. Es verbrauchte auch viel CPU auf dem Script-Server und machte riesige Fehlerprotokolle.

   `nc -z $ip_address -w 20 22` 1>/dev/null 2>&1; result=$?;
    while [ $result -eq 1 ]
      do
      #echo $ip_address booting
      `nc -z $ip_address -w 30 22` 1>/dev/null 2>&1; result=$?;
      sleep 30
    done

Hier ist ein komplettes Skript, um eine Instanz zu starten, zu kennzeichnen, zu warten, bis sie vollständig gestartet ist, und eine Verbindung herzustellen.

 instance_id=$(aws ec2 run-instances --region us-east-1 --count 1 --instance-type $AMItype --image-id $AMI --security-group-ids $sg_group --output text --query 'Instances[*].InstanceId' )

 aws ec2 create-tags --resources $instance_id --tags "Key=Name, Value=$AMIname
 #delay until AWS says instance is running
 start_state=0
 while [ $start_state -ne 16 ]
        do
         start_state=$(aws ec2 start-instances --instance-ids $instance_id --query 'StartingInstances[*].PreviousState[*].Code[*]' )
         start_state=$(echo $start_state | tr -d '" []')
         sleep 10
 done
 ip_address=$(aws ec2 describe-instances --instance-ids $instance_id --output text --query 'Reservations[*].Instances[*].PrivateIpAddress')

 `nc -z $ip_address -w 20 22` 1>/dev/null 2>&1; result=$?;
        while [ $result -eq 1 ]
          do
           #waiting for routing updates and connectivity
           `nc -z $ip_address -w 30 22` 1>/dev/null 2>&1; result=$?;
           sleep 30
        done
4
Mark306

Eine weitere mögliche Ursache für einen Fehler bei der Verbindung zu einem Anschluss 22 ist das falsche Schreiben des öffentlichen DNS-Namens. Zum Beispiel enthielt ein Teil von mir .compute. und ich legte .computer. ein, und es gab mir einen Port 22-Fehler anstelle von etwas Vernünftigerem, wie der Host nicht existiert.

3
demongolem

Haben Sie die IP-Adresse der Instanz überprüft? Meines ändert sich bei jedem Start, es sei denn, ich habe eine feste IP-Adresse gewählt.

2
Spikolynn

Ich bin auf ein ähnliches Problem gestoßen, ich habe festgestellt, dass die Instanz mit der Virtualisierung von Paravirtual erstellt wurde und nachdem das Problem mit hvm neu geschrieben wurde, das Problem behoben wurde.

0

Ich hatte ein anderes (und ehrlich gesagt sehr dummes) Thema. Diese Antwort hier veröffentlichen, falls sie jemandem hilft.

Als Teil des Debugging habe ich einige neue Instanzen gestartet, von denen keine eine Verbindung herstellen konnte. Deshalb habe ich gerade meinen Rechner neu gestartet! 

Es funktioniert jetzt! : D


0
hackerinheels