Skip to content

epomatti/aws-ssh-tunneling

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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