我有一个ec2实例的名称,并希望对它进行ssh。如何使用ec2实例名称找出ec2实例的“公共DNS”。
我想用bash来做。
答案 0 :(得分:13)
aws ec2 describe-instances --instance-ids i-12abc34 --query 'Reservations[].Instances[].PublicDnsName'
其中i-12abc34是您的实例ID
答案 1 :(得分:7)
使用EC2 API工具:
# Region is only needed if not in us-east-1
$ ec2-describe-instances --region <region> <instance id>
使用统一的AWS CLI tool:
$ aws --region <region> ec2 describe-instances --instance-ids <instance id≥
我更喜欢统一工具,因为它提供了全面而一致的数据。
答案 2 :(得分:2)
如果按照本答案的说明安装cloud-utils工具,那就更直接了 前进。
https://stackoverflow.com/a/10600619/28672
ec2-metadata --public-ipv4
> public-ipv4: 54.200.4.52
答案 3 :(得分:1)
这取决于你的意思&#34;弄清楚&#34;。如果你的意思是搞清楚自己,你就不能。公共DNS名称与ec2实例名称无关。公共DNS名称由公共IP地址,区域/可用区域,服务类型,aws域名等组成。例如,ec2-xx-xxx-x-xx.us-west-2.compute.amazonaws.com 。由于每次停止和启动实例时都会更改公共IP地址,除非使用弹性IP地址,否则将更改公用DNS名称。
如果您的意思是使用AWS API或CLI工具搞清楚,您可以。使用EC2 CLI,您应该使用命令 ec2-describe-instances instance_id 。同样,实例必须运行,并且公共DNS在停止/启动后确实发生了变化。
答案 4 :(得分:1)
您可以查询instance metadata服务。
使用卷曲:
export class AppComponent {
PepPartner : "";
PepBlacklisted : "";
Blacklist : "";
public formGroup: FormGroup;
constructor(private fb: FormBuilder) {}
screenofAML() {
let self = this;
this.formGroup = this.fb.group({
PepPartner :['',Validators.required],
PepBlacklisted :['',Validators.required],
Blacklist :['',Validators.required],
});
}
validateForm() {
if (this.formGroup.invalid) {
this.formGroup.get('PepPartner').markAsTouched();
this.formGroup.get('PepBlacklisted').markAsTouched();
this.formGroup.get('Blacklist').markAsTouched();
return;
}
else {
const dataObj = {
PepPartner:this.formGroup.get('PepPartner').value,
PepBlacklisted:this.formGroup.get('PepBlacklisted').value,
Blacklist :this.formGroup.get('Blacklist').value,
}
}
}
onResetClick() {
this.PepPartner = "";
this. PepBlacklisted = "";
this.Blacklist ="";
}
}
<div class ="space">
<mat-form-field>
<mat-label>Is this partner a PEP?</mat-label>
<mat-error *ngIf="formGroup.get('PepPartner').hasError('required')">
PEP Partner is required
</mat-error>
<mat-select disableRipple [(ngModel)]="PepPartner" formControlName="PepPartner">
<mat-option ></mat-option>
<mat-option value="1">Yes</mat-option>
<mat-option value="2">No</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field>
<mat-label>Does this partner blacklisted</mat-label>
<mat-error *ngIf="formGroup.get('PepBlacklisted').hasError('required')">
Partner blacklisted is required
</mat-error>
<mat-select disableRipple [(ngModel)]="PepBlacklisted" formControlName="PepBlacklisted" >
<mat-option ></mat-option>
<mat-option value="1">Yes</mat-option>
<mat-option value="2">No</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field >
<mat-error *ngIf="formGroup.get('Blacklist').hasError('required')">
Blacklisted is required
</mat-error>
<input matInput placeholder="Blacklist(s)" [(ngModel)]="Blacklist" formControlName="Blacklist" >
</mat-form-field>
<div class="button-position">
<div class="text-right pr-0 pb-2">
<div class="btn-group">
<button type="button" id="button1" mat-raised-button class="text-uppercase app-btn app-btn-
primary-border app-color-primary"
(click)="validateForm()" >Save</button>
<button type="button" id="button2" mat-raised-button class="text-uppercase app-btn app-btn-
primary-border app-color-primary"
(click)="onResetClick()">Clear</button>
</div>
</div>
</div>
使用wget:
curl -s http://169.254.169.254/latest/meta-data/public-hostname
如果勇敢,actual bash:
wget -qO - http://169.254.169.254/latest/meta-data/public-hostname
(最后一个为我打开了连接,所以exec 3<> /dev/tcp/169.254.169.254/80
echo -e "GET /latest/meta-data/public-hostname HTTP/1.0\r\n\r\n" >&3
cat <&3
被卡住了。标头也出现在输出中)
(这是来自实例本身,需要访问实例-它不是与实例名称相关的版本。这里有足够的答案)