Skip to content

epomatti/aws-ssh-tunneling

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Oct 2, 2023
5ec503e · Oct 2, 2023

History

3 Commits
Oct 2, 2023
Oct 2, 2023
Oct 2, 2023
Oct 2, 2023
Oct 2, 2023
Oct 2, 2023
Oct 2, 2023
Oct 2, 2023
Oct 2, 2023
Oct 2, 2023

Repository files navigation

AWS SSH Tunneling

Connecting from a local workstation to AWS RDS MySQL via SSH tunneling.

Create a .auto.tfvars to setup your stack:

aws_region         = "us-east-2"
rds_instance_class = "db.t4g.micro"
rds_multi_az       = false
rds_username       = "mysqladmin"
rds_password       = "p4ssw0rd"

jumpserver_allow_ssh = ["0.0.0.0/0"]

Apply the stack:

terraform init
terraform apply -auto-approve

Create a temporary key pair:

mkdir keys
ssh-keygen -f keys/temp_key

Add the public key to the .ssh/authorized_keys file using SSM Run Command:

# Set "instance-id" and "SSH_PUB_KEY" values accordingly
aws ssm send-command \
    --targets "Key=InstanceIds,Values=instance-id" \
    --document-name "AWS-RunShellScript" \
    --comment "Add public key to SSH tunneling" \
    --parameters "commands='echo SSH_PUB_KEY >> /home/ubuntu/.ssh/authorized_keys'" \
    --output text

Check the command status:

aws ssm get-command-invocation \
    --command-id "ef7fdfd8-9b57-4151-a15c-db9a12345678" \
    --instance-id "i-1234567890abcdef0" \
    --query Status

Check if everything is working by connecting via SSH:

ssh -i keys/temp_key ubuntu@<INSTANCE_DNS>

Before creating the tunnel, enhance the security by allowing only your IP to connect via SSH:

jumpserver_allow_ssh = ["YOUR PUBLIC IP/32"]

Apply the configuration.

Now, create the tunnel:

ssh -i keys/temp_key -f -N -l ubuntu -L 3306:RDS_MYSQL_FQDN:3306  EC2_INSTANCE_FQDN -v

If the tunnel is created, you should now be able to connect to MySQL from your local machine on port 3306.


Clean-up

terraform destroy -auto-approve