Einfügen der IP-Adresse in die Eingabeaufforderung

Einfügen der IP-Adresse in die Eingabeaufforderung

Ich habe die folgende komplizierte Methode, um die IP-Adresse einer EC2-Instanz in die Befehlszeile einzufügen. Sie funktioniert, hat aber einige offensichtliche Probleme und ich suche nach einer guten Möglichkeit, diese zu lösen:

TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
IP=`curl -H "X-aws-ec2-metadata-token: \$TOKEN" -v http://169.254.169.254/latest/meta-data/local-ipv4`

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@$IP-\H\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='$IP${debian_chroot:+($debian_chroot)}\u@$IP-\H:\w\$ '
fi

Meine Methode weist einige Probleme auf, die ich ansprechen möchte:

  1. Beim Laden oder Anmelden bei Bash wird eine Menge unerwünschter Ausgabe generiert:
Last login: Thu Dec 17 16:57:37 2020 from 22.123.17.122
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    56  100    56    0     0  11200      0 --:--:-- --:--:-- --:--:-- 11200
* Expire in 0 ms for 6 (transfer 0x560383dabf90)
*   Trying 169.254.169.254...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x560383dabf90)
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Connected to 169.254.169.254 (169.254.169.254) port 80 (#0)
> GET /latest/meta-data/local-ipv4 HTTP/1.1
> Host: 169.254.169.254
> User-Agent: curl/7.64.0
> Accept: */*
> X-aws-ec2-metadata-token: AQAAAEjtIasdfadfasdf5ksdjkjkkasdfe947xQ==
>
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Accept-Ranges: bytes
< Content-Length: 12
< Content-Type: text/plain
< Date: Thu, 17 Dec 2020 22:52:25 GMT
< Last-Modified: Tue, 15 Dec 2020 14:11:17 GMT
< X-Aws-Ec2-Metadata-Token-Ttl-Seconds: 21600
< Connection: close
< Server: EC2ws
<
{ [12 bytes data]
100    12  100    12    0     0   2400      0 --:--:-- --:--:-- --:--:--  2400
* Closing connection 0
  1. Das andere Problem ist, dass dies jedes Mal ausgeführt wird, wenn ich mich bei Bash anmelde oder Bash neu lade. Ich würde gerne einen Weg finden, dies zu umgehen, wenn die IP-Adresse bereits bekannt ist.

Antwort1

Sie haben ausdrücklich nach einer ausführlichen Ausgabe von curl in der zweiten Befehlszeile gefragt, die den größten Teil der Ausgabe ausmacht. Sie sollten entfernen -v. Um dann die Fortschrittsanzeige zu unterdrücken, verwenden Sie -s(in beiden Befehlen). Dies sollte Ihnen keine Ausgabe hinterlassen, es sei denn, es liegt ein Fehler vor.

Es wäre besser, wenn Sie dies beim Start ausführen und die resultierende IP-Adresse in eine Datei schreiben und dann einfach den Inhalt dieser Datei in Ihrem Bash-Profil lesen. (Dies setzt voraus, dass sich die IP-Adresse während der Ausführung der Instanz nicht ändert, was meines Wissens nach nicht der Fall ist.)

Stellen Sie sich ein lokales Startskript wie das folgende vor:

#!/usr/bin/env bash
TOKEN=`curl -s -X PUT -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" http://169.254.169.254/latest/api/token`
curl -s -H "X-aws-ec2-metadata-token: \$TOKEN" -o /tmp/local-ipv4 http://169.254.169.254/latest/meta-data/local-ipv4

Jetzt können Sie es in Ihrem Bash-Profil lesen:

IP=$(cat /tmp/local-ipv4)

verwandte Informationen