セキュリティ上よろしくないやり方ですので参考程度で
毎回マネジメントコンソールからインスタンスidを拾ってssh_configを書き直すのがめんどくさい!!
であれば自動化したらいいよね
やりかた
- EC2モジュールのmain.tfに以下を記述
main.tf
resource "null_resource" "output_instance_id" {
triggers = {
xxx_id = aws_instance.xxx.id //xxxは環境に合わせたec2インスタンス名
}
provisioner "local-exec" {
command = "echo yyyy ${aws_instance.xxx.id} >> ec2_id.txt" //yyyはインスタンスの固有名を設定するとわかりやすい例 EC2-AP-1aなど
}
}
ec2_id.txtにインスタンスidが出力されます。 >> で追記しているのはEC2複数インスタンスがあるからそうしてます。
- ec2_id.txtを書き換える
ini_convert.sh
#!/bin/bash
file_path="./ec2_id.txt"
# 変数でEC2のIDを取得する
ec2_id_x=$(grep 'xxx' ./ec2_id.txt | awk '{print $2}')
ec2_id_y=$(grep 'yyy' ./ec2_id.txt | awk '{print $2}')
# 挿入するテキストを指定する
new_text="[SSHコンフィグのホスト名]\n hostname = xxx ${ec2_id_x}\n[SSHコンフィグのホスト名]\n hostname = yyy ${ec2_id_y}"
# 挿入するテキストを含めた新しいファイルを作成する
awk -v text="$new_text" '
{
if (NR > 2) {
print
}
if (NR == 1) {
print text
}
}
' "$file_path" > /tmp/file.txt
#この方法だとできませんでした。(ssh configは外部の変数を使えません。)一応configごと置き換えられるようにするpythonコードを置いておきます。
sshconfig_rewrite.py
import configparser
import shutil
class sshconfig_rewrite():
def __init__(self):
source_file = "./sshconfig.template"
destination_file = "~/.ssh/config"
shutil.copyfile(source_file, destination_file)
self.input_file = "~/.ssh/config"
config = configparser.ConfigParser()
config.read('./ec2_id.ini')
self.replace_text1 = '@@@hostname1@@@'
self.replace_text2 = '@@@hostname2@@@'
self.new_text1 = config.get('EC21A-aws-dev','hostname')
self.new_text2 = config.get('EC21C-aws-dev','hostname')
def ec2id_add_sshconfig(self):
with open(self.input_file, 'r') as file:
content = file.read()
content = content.replace(self.replace_text1, self.new_text1)
with open(self.input_file, 'w') as file:
file.write(content)
with open(self.input_file, 'r') as file:
content = file.read()
content = content.replace(self.replace_text2, self.new_text2)
with open(self.input_file, 'w') as file:
file.write(content)
if __name__ == "__main__":
main = sshconfig_rewrite()
main.ec2id_add_sshconfig()
print("Text replacement is complete.")
./sshconfig.temlate
host EC21A-aws-dev
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
User xxxxx
Port xx
HostName @@@hostname1@@@
IdentityFile xxxx
host EC21C-aws-dev
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
User xx-xxxx
Port xx
HostName @@@hostname2@@@
IdentityFile xxxx