Blog

Wie man sich bei EC2-Instanzen ohne SSH anmeldet

Mark van Holsteijn

Mark van Holsteijn

Aktualisiert Oktober 21, 2025
3 Minuten

In früheren Beiträgen haben wir Ihnen gezeigt, wie Sie ein privates Schlüsselpaar bereitstellen, mit dem Sie sich bei einer
EC2-Instanz anmelden können. Seit September 2018 unterstützt der AWS Session Manager die Anmeldung bei jeder Instanz direkt von der Kommandozeile aus ohne SSH. In diesem
Blog zeigen wir Ihnen, wie Sie dies mit CloudFormation konfigurieren können.
Um sich mit dem AWS Session Manager bei einer EC2-Instanz anzumelden, müssen Sie drei Dinge tun:
* Installieren Sie den AWS SSM-Agenten
* Erteilen Sie dem Sitzungsmanager Berechtigungen
* Aktivieren Sie die Audit-Protokollierung

Installieren Sie den AWS SSM-Agent

Wir sind faul und verwenden eine Amazon Linux-basierte Instanz, auf der der Agent bereits installiert ist. Für andere
AMIs konsultieren Sie bitte die Dokumentation.
In CloudFormation fügen wir die Instanz hinzu:

Parameters:
  AmiId:
    Type: 'AWS::SSM::Parameter::Value<aws::EC2::Image::Id>'
    Default: '/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-gp2'

Resources:
  Instance:
    Type: 'AWS::EC2::Instance'
    Properties:
      ImageId: !Ref 'AmiId'
      IamInstanceProfile: !Ref 'IamInstanceProfile'

Berechtigungen für Sitzungsmanager erteilen

Der Agent benötigt die folgenden Berechtigungen, um den Sitzungsmanager zu aktivieren:

- Effect: Allow
  Action:
    - ssmmessages:CreateControlChannel
    - ssmmessages:CreateDataChannel
    - ssmmessages:OpenControlChannel
    - ssmmessages:OpenDataChannel
  Resource: '*'
- Effect: Allow
  Action:
    - s3:GetEncryptionConfiguration
  Resource: '*'

Um die Dinge klein und einfach zu halten, verknüpfen wir die Rolle AmazonEC2RoleforSSM mit dem Instanzprofil, das
die oben genannten Berechtigungen enthält:

InstanceRole:
  Type: AWS::IAM::Role
  Properties:
    AssumeRolePolicyDocument:
      Statement:
    - Effect: Allow
      Principal:
        Service:
          - ec2.amazonaws.com
      Action:
        - sts:AssumeRole
    Path: /
    ManagedPolicyArns:
      - arn:aws:iam::aws:policy/service-role/AmazonEC2RoleforSSM

Audit-Protokollierung einschalten

Mit AWS Session Manager können Sie die Sitzungsprotokolle entweder auf S3, CloudWatch oder auf beiden speichern.
Um die Audit-Protokollierung zu aktivieren, müssen Sie ein SSM-Dokument mit dem Namen SSM-SessionManagerRunShell erstellen:

  SessionManagerPreferences:
    Type: Custom::SSMDocument
    Properties:
      Name: SSM-SessionManagerRunShell
      DocumentType: Session
      Content: !Sub >
        { "schemaVersion": "1.0",
          "content": "Session Manager Preferences",
          "sessionType": "Standard_Stream",
          "inputs": {
            "s3BucketName": "${SessionLogBucket}",
            "s3KeyPrefix": "",
            "s3EncryptionEnabled": false,
            "cloudWatchLogGroupName": "${SessionLogGroup}",
            "cloudWatchEncryptionEnabled": false
          }
        }

Beachten Sie, dass wir einen benutzerdefinierten CloudFormation-Anbieter erstellen mussten, um das Dokument zu erstellen, da die standardmäßige
CloudFormation-Ressource keine Angabe des Dokumentnamens zulässt.

eine Sitzung beginnen

Nach der Bereitstellung können Sie sich bei Ihrer Instanz anmelden, indem Sie Folgendes eingeben:

$ aws ssm start-session --target <instance-id>

Demo

Die vollständige CloudFormation-Vorlage finden Sie auf github. Um
zu testen, geben Sie ein:

$ git clone https://github.com/binxio/blog-login-to-ec2-instances-without-ssh
$ cd blog-login-to-ec2-instances-without-ssh
$ make
create demo in default VPC vpc-12313137, subnets subnet-privatea,subnet-privateb,subnet-privatec using security group sg-default.
{
    "StackId": "arn:aws:cloudformation:eu-central-1:111111111111:stack/ec2-session-manager/207b6890-26dc-11e9-b214-021298c8e4cc"
}

[
    "aws ssm start-session --target i-0c25d8bf100a5d1da", 
    "aws logs get-log-events --log-group-name ec2-session-manager-SessionLogGroup-L9G8VSLL6XCK --log-stream-name $SESSION_ID", 
    "aws s3 cp s3://ec2-session-manager-sessionlogbucket-q8c1pz8q6u6g/$SESSION_ID.log -"
]

kopieren Sie den ausgegebenen Befehl start-session:

$ aws ssm start-session --target i-12311231123132

Starting session with SessionId: mvanholsteijn-0d9ce5dd2172522f7

sh-4.2$  sudo tail /var/log/amazon/ssm/*.log

Mit der Aktion ssm:StartSession können Sie Benutzern den Start einer Sitzung ausdrücklich erlauben oder verweigern.

Sitzungsprotokoll anzeigen

Um das Sitzungsprotokoll von s3 anzuzeigen, geben Sie ein:

SESSION_ID=mvanholsteijn-0d9ce5dd2172522f7
aws s3 cp s3://ec2-session-manager-sessionlogbucket-q8c1pz8q6u6g/$SESSION_ID.log -

Nach dem Beenden der Sitzung dauert es einige Minuten, bis das Protokoll erscheint.

Fazit

Der AWS Session Manager vereinfacht die Anmeldung bei jeder Ihrer EC2-Instanzen, auf denen der
SSM-Agent installiert ist, ohne SSH. Er erspart Ihnen die Komplizierung Ihrer
Infrastruktur mit Benutzer- und SSH-Schlüsselverwaltung. Sobald die Unterstützung für Tunneling verfügbar ist,
können wir uns von dem Konzept eines Bastion Hosts verabschieden.
Wenn Sie sich weiterhin mit SSH anmelden möchten, empfehlen wir Ihnen den Blog über die Bereitstellung eines privaten Schlüsselpaars.

Verfasst von

Mark van Holsteijn

Mark van Holsteijn is a senior software systems architect at Xebia Cloud-native solutions. He is passionate about removing waste in the software delivery process and keeping things clear and simple.

Contact

Let’s discuss how we can support your journey.