Работа с Terraform 0.12v и провайдером AWS.
Я использую user_data
для открытия SSH-соединения через порт 8080
.
Мои ресурсы.tf:
resource "aws_instance" "instance" {
user_data = "${data.template_file.init.rendered}"
#user_data = "${file("init.sh")}" <--also did not work
ami = "ami-06fea6d88c62d4e26" #Update: The problem is probably related to this ami (Linux Kali)
instance_type = "t2.medium"
subnet_id = "${aws_subnet.public_subnet.id}"
security_groups = ["${aws_security_group.public_sg.id}"]
key_name = "${var.auth_key_name}"
}
data "template_file" "init" {
template = "${file("./init.tpl")}"
vars = {
ssh_port = "8080"
}
}
init.tpl:
#!/bin/bash
sudo apt update && sudo apt -y upgrade
sudo sed -i 's/22/${ssh_port}/g' /etc/ssh/sshd_config
sudo service ssh restart
Проблема: я не могу соединиться с ssh -i "my-key.pem" ec2-user@<instance-ip> -p 8080
( соединение отклонено ).
Отладка
Для отладки я открыл порт 22
и вставил SSH в экземпляр EC2.
Когда я запускаю изнутри: ec2-user@kali:~$ cat /etc/ssh/sshd_config
Я вижу, что порт не изменился:
Port 22 <------- This was supposed to be 8080
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
.
.
.
Еще несколько моментов:
1) Это не опечатка в sed
команда, потому что когда я запускаю изнутри экземпляра EC2:
sudo sed -i 's/22/8080/g' /etc/ssh/sshd_config
sudo service ssh restart
Он работает отлично.
2) Я также вижу в консоли управления AWS две строки init.tpl
отображается под user_data
(и ${ssh_port}
изменяется на 8080
).
3) Я также попытался написать ssh_port
inline как 8080
, чтобы использовать обычный init.sh
скрипт вместо init.tpl
- все еще не работает.
4) Важное обновление - проблема, вероятно, связана с выбранным мной ами (Linux Kali), потому что когда я перешел на Amazon Linux 2 AMI (ami-0ce933e2ae91880d3), все отлично работает .
Любая помощьбудет очень признателен.
Дополнительные связанные файлы.
security-group.tf:
resource "aws_security_group" "public_sg" {
name = "public_sg"
description = "Allow specific ports only"
vpc_id = "${aws_vpc.base_vpc.id}"
ingress {
from_port = "8080"
to_port = "8080"
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
provider.tf:
provider "aws" {
region = "ap-south-1"
shared_credentials_file = ".credentials"
}
Полное содержимое /etc/ssh/sshd_config
ec2-user@kali:~$ cat /etc/ssh/sshd_config
Port 22
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
UsePrivilegeSeparation yes
KeyRegenerationInterval 3600
ServerKeyBits 1024
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 120
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM yes
PermitRootLogin prohibit-password
PasswordAuthentication no
ClientAliveInterval 180
Я обнаружил следующие связанные темы:
Запуск ssh на экземпляре Amazon EC2 через порт, отличный от 22 * 1075 *
Запуск экземпляра EC2 неожиданно отказывает в SSH-соединении
Команды в user_data не выполняются в terraform
Но не найденырешение.