コマンドプロンプトにIPアドレスを入力する

コマンドプロンプトにIPアドレスを入力する

ec2 インスタンスの IP アドレスをコマンド ラインに挿入するための複雑な方法があります。これは機能しますが、明らかな問題がいくつかあり、それを解決する良い方法を探しています。

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

私の方法には解決したい問題がいくつかあります。

  1. bash をロードまたはログインするときに、不要な出力が大量に生成されます。
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. もう 1 つの問題は、bash にログインするたび、または bash をリロードするたびにこれが実行されることです。IP アドレスが既にわかっている場合は、これを回避する方法を見つけたいと思います。

答え1

2 番目のコマンド ラインで curl からの詳細出力を明示的に要求しましたが、これが出力の大部分を占めています。 を削除する必要があります-v。次に、進行状況メーターを抑制するには、-s両方のコマンドで (を使用します) を使用します。これにより、エラーがない限り、出力は表示されなくなります。

起動時にこれを実行し、結果の IP アドレスをファイルに書き込み、そのファイルの内容を bash プロファイルで読み取る方がよいでしょう。(これは、インスタンスの実行中に IP アドレスが変更されないことを前提としていますが、私の知る限り、これは起こりません。)

次のようなローカル起動スクリプトを検討してください。

#!/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

これで、bash プロファイルで読み取ることができます。

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

関連情報