gpt4 book ai didi

linux - 以编程方式更改新创建的 AWS 实例的主机名

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:09:49 26 4
gpt4 key购买 nike

我能够使用 AWS Java SDK 创建 EC2 实例 (Amazon Linux):

RunInstancesRequest runInstancesRequest = new RunInstancesRequest()
.withInstanceType(InstanceType.valueOf("T2Micro"))
.withImageId("ami-12345abc")
.withMinCount(1)
.withMaxCount(1)
.withSecurityGroupIds("some-group")
.withKeyName("my-key")

RunInstancesResult runInstancesResult = ec2.runInstances(runInstancesRequest);

现在我希望以编程方式更改由此创建的服务器的 hostname。手动可以通过这个 AWS documentation .我想自动执行此操作,所以我尝试使用 user data shell scripts作为:

RunInstancesRequest runInstancesRequest = new RunInstancesRequest()
.withInstanceType(InstanceType.valueOf("T2Micro"))
......
.withUserData(getUserDataScript());
RunInstancesResult runInstancesResult = ec2.runInstances(runInstancesRequest);

private static String getUserDataScript() {
String str = "#!/bin/bash\n" +
"sudo sed -i -e 's/[before]/after/' /etc/sysconfig/network\n" +
"sudo init 6";
return Base64.getEncoder().encodeToString(str.getBytes());
}

现在的问题是我已经无法登录到这样创建的实例了。只是给出一个普通的 connection refused 错误。检查 key 和每个细节 - 如果我不提供用户数据脚本,我可以登录。

我是否正确更改了主机名?有没有其他方法可以自动执行此操作?

最佳答案

当您运行 sudo init 6 时,您会重新启动,这可能需要一些时间,这就是您无法立即登录的原因;

您可以尝试运行 hostname 命令以直接使用新的主机名,这样脚本将类似于

    String str = "#!/bin/bash\n" +
"sudo sed -i -e 's/[before]/new_hostname/' /etc/sysconfig/network\n" +
"sudo echo 'new_hostname' >> /etc/hostname" +
"sudo hostname new_hostname";

注意:我没有完全测试这个,但我希望它应该在不重新启动的情况下使用 new_hostname 所以它应该允许你连接 - 根据你的 linux 发行版的风格它可能有点不同,我建议你首先正常登录到实例并运行命令以确保 ti 在您的 linux 发行版上工作

关于linux - 以编程方式更改新创建的 AWS 实例的主机名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39242756/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com