[英]Programmatically change hostname of a newly created AWS instance
我可以使用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文档可以手动进行。 我想使它自动化,因此我尝试将用户数据shell脚本用作:
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
错误。 检查了密钥和每个细节-如果我不提供用户数据脚本,则可以登录。
我是否正确更改了主机名? 还有其他自动化方法吗?
当您运行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 distro风格,它可能有所不同,我建议您首先正常登录实例,然后运行命令以确保ti在您的Linux发行版上正常工作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.