What is the purpose of a connection block in Terraform when using SSH?
A connection block tells Terraform how to connect to a remote machine using SSH. It provides details like the host address, user name, and authentication method so Terraform can run commands or copy files on that machine.
Click to reveal answer
beginner
Which key fields are commonly used inside a Terraform SSH connection block?
Common fields include host (IP or hostname), user (username to log in), private_key (SSH private key content), and port (SSH port, usually 22).
Click to reveal answer
intermediate
How do you specify the SSH private key in a Terraform connection block?
You use the private_key field and provide the private key as a string. For example, you can read it from a file using Terraform's file() function.
Click to reveal answer
beginner
True or False: The connection block is required for Terraform to manage resources on remote machines via SSH.
True. Without a connection block, Terraform does not know how to connect to the remote machine to execute commands or transfer files.
Click to reveal answer
beginner
What happens if you omit the port field in a Terraform SSH connection block?
Terraform will use the default SSH port 22 to connect to the remote machine.
Click to reveal answer
Which field in a Terraform connection block specifies the username for SSH?
Auser
Bhost
Cprivate_key
Dport
✗ Incorrect
The user field specifies the username Terraform uses to log in via SSH.
What is the default SSH port used if the port field is not set in the connection block?
A443
B21
C80
D22
✗ Incorrect
SSH uses port 22 by default.
How can you provide the SSH private key content in a Terraform connection block?
AUsing the <code>password</code> field
BUsing the <code>private_key</code> field with the key as a string
CUsing the <code>host</code> field
DUsing the <code>user</code> field
✗ Incorrect
The private_key field holds the SSH private key content as a string.
Which Terraform resource block commonly uses a connection block for SSH?
Aaws_instance
Bazurerm_virtual_network
Cnull_resource
Dgoogle_storage_bucket
✗ Incorrect
The null_resource often uses connection blocks to run remote commands via SSH.
What is the main reason to use a connection block in Terraform?
ATo connect to a remote machine for executing commands
BTo define the cloud provider
CTo specify resource dependencies
DTo set environment variables
✗ Incorrect
Connection blocks tell Terraform how to connect to remote machines to run commands or copy files.
Explain how a Terraform connection block is used to connect to a remote machine via SSH.
Think about what information Terraform needs to log in and run commands remotely.
You got /5 concepts.
Describe what happens if you omit the port field in a Terraform SSH connection block.
Consider the standard SSH port and how Terraform behaves without explicit port info.
You got /3 concepts.
Practice
(1/5)
1. What is the main purpose of a connection block in Terraform when using SSH?
easy
A. To specify the Terraform backend storage
B. To define how Terraform connects to remote machines for running commands or copying files
C. To configure the cloud provider credentials
D. To create a new SSH key pair automatically
Solution
Step 1: Understand the role of connection blocks
Connection blocks specify how Terraform connects to remote machines, typically using SSH, to run commands or transfer files during provisioning.
Step 2: Differentiate from other configurations
SSH key creation, cloud credentials, and backend storage are configured elsewhere, not in connection blocks.
Final Answer:
To define how Terraform connects to remote machines for running commands or copying files -> Option B
D. connection { user = "ubuntu" host = self.public_ip private_key = file("~/.ssh/id_rsa") }
Solution
Step 1: Recall Terraform connection block syntax
The correct keys are user, host, and private_key. The type key is not required for SSH as it is the default.
Step 2: Identify the valid syntax
connection { user = "ubuntu" host = self.public_ip private_key = file("~/.ssh/id_rsa") } uses correct keys without unnecessary or incorrect ones like type or protocol.
Final Answer:
connection { user = "ubuntu" host = self.public_ip private_key = file("~/.ssh/id_rsa") } -> Option D
Quick Check:
Correct keys = user, host, private_key [OK]
Hint: Use user, host, private_key keys in connection block [OK]
Common Mistakes:
Adding unnecessary 'type' or 'protocol' keys
Using wrong key names like ssh_user or username
Omitting required keys like user or host
3. Given this Terraform snippet, what will happen when Terraform tries to connect?
A. private_key should use file() function to read the key content
B. host should be a static IP, not a resource attribute
C. user must be 'ubuntu' for AWS instances
D. Missing 'type = "ssh"' in connection block
Solution
Step 1: Check private_key value type
The private_key must contain the actual key content, not just the file path string. Using file("~/.ssh/id_rsa") reads the key content.
Step 2: Validate other fields
Host can be a resource attribute, user can be 'ec2-user' for Amazon Linux, and 'type' defaults to SSH so it's optional.
Final Answer:
private_key should use file() function to read the key content -> Option A
Quick Check:
private_key needs file() to read key [OK]
Hint: Use file() to load private_key content, not just path string [OK]
Common Mistakes:
Assigning private_key a file path string directly
Assuming host cannot be a resource attribute
Forcing user to 'ubuntu' regardless of OS
5. You want to run a remote command on an AWS instance using Terraform. Which connection block setup is best practice to ensure a reliable SSH connection?
hard
A. connection {
user = "ec2-user"
host = aws_instance.app.public_ip
private_key = file("~/.ssh/id_rsa")
timeout = "5m"
agent = true
}
B. connection {
user = "ec2-user"
host = aws_instance.app.public_ip
private_key = file("~/.ssh/id_rsa")
timeout = "1m"
agent = false
}
C. connection {
user = "ec2-user"
host = aws_instance.app.private_ip
private_key = file("~/.ssh/id_rsa")
timeout = "5m"
agent = true
}
D. connection {
user = "ubuntu"
host = aws_instance.app.public_ip
private_key = file("~/.ssh/id_rsa")
timeout = "30s"
agent = false
}
Solution
Step 1: Choose correct user and host
For AWS Amazon Linux, user is usually 'ec2-user'. Public IP is needed for SSH from outside the VPC.
Step 2: Set appropriate timeout and agent
A longer timeout like "5m" helps with slow connections. Using SSH agent forwarding (agent = true) can improve key management.
Step 3: Compare options
connection {
user = "ec2-user"
host = aws_instance.app.public_ip
private_key = file("~/.ssh/id_rsa")
timeout = "5m"
agent = true
} uses correct user, public IP, sufficient timeout, and enables agent forwarding, matching best practices.