RedHat 系 Linux のホスト名を設定する

Vagrant とかでたくさん VM 立ち上げるときホスト名設定しないと何が何だかわからなくなるのでシェルプロビジョニングには以下の様なコマンドセットを紛れ込ませています。

7 系

HOSTNAME=from
sudo hostname $HOSTNAME
echo $HOSTNAME | sudo tee /etc/hostname

6 系

HOSTNAME=from
sudo hostname $HOSTNAME
sudo sed -i -e "s/\\(HOSTNAME=\\).*$/\\1$HOSTNAME/g" /etc/sysconfig/network

awscliでキーペア(鍵ペア)を生成する

意外と簡単。あとは jq で見せ方を工夫すればOK。
ここではVagrantのinsecure private keyをダミーとして使用。

% aws ec2 create-key-pair --key-name default | jq -r '.KeyMaterial' | tee ~/.ssh/aws-ec2-default.pem && chmod 600 ~/.ssh/aws-ec2-default.pem
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzI
w+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoP
kcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2
hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NO
Td0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcW
yLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQIBIwKCAQEA4iqWPJXtzZA68mKd
ELs4jJsdyky+ewdZeNds5tjcnHU5zUYE25K+ffJED9qUWICcLZDc81TGWjHyAqD1
Bw7XpgUwFgeUJwUlzQurAv+/ySnxiwuaGJfhFM1CaQHzfXphgVml+fZUvnJUTvzf
TK2Lg6EdbUE9TarUlBf/xPfuEhMSlIE5keb/Zz3/LUlRg8yDqz5w+QWVJ4utnKnK
iqwZN0mwpwU7YSyJhlT4YV1F3n4YjLswM5wJs2oqm0jssQu/BT0tyEXNDYBLEF4A
sClaWuSJ2kjq7KhrrYXzagqhnSei9ODYFShJu8UWVec3Ihb5ZXlzO6vdNQ1J9Xsf
4m+2ywKBgQD6qFxx/Rv9CNN96l/4rb14HKirC2o/orApiHmHDsURs5rUKDx0f9iP
cXN7S1uePXuJRK/5hsubaOCx3Owd2u9gD6Oq0CsMkE4CUSiJcYrMANtx54cGH7Rk
EjFZxK8xAv1ldELEyxrFqkbE4BKd8QOt414qjvTGyAK+OLD3M2QdCQKBgQDtx8pN
CAxR7yhHbIWT1AH66+XWN8bXq7l3RO/ukeaci98JfkbkxURZhtxV/HHuvUhnPLdX
3TwygPBYZFNo4pzVEhzWoTtnEtrFueKxyc3+LjZpuo+mBlQ6ORtfgkr9gBVphXZG
YEzkCD3lVdl8L4cw9BVpKrJCs1c5taGjDgdInQKBgHm/fVvv96bJxc9x1tffXAcj
3OVdUN0UgXNCSaf/3A/phbeBQe9xS+3mpc4r6qvx+iy69mNBeNZ0xOitIjpjBo2+
dBEjSBwLk5q5tJqHmy/jKMJL4n9ROlx93XS+njxgibTvU6Fp9w+NOFD/HvxB3Tcz
6+jJF85D5BNAG3DBMKBjAoGBAOAxZvgsKN+JuENXsST7F89Tck2iTcQIT8g5rwWC
P9Vt74yboe2kDT531w8+egz7nAmRBKNM751U/95P9t88EDacDI/Z2OwnuFQHCPDF
llYOUI+SpLJ6/vURRbHSnnn8a/XG+nzedGH5JGqEJNQsz+xT2axM0/W/CRknmGaJ
kda/AoGANWrLCz708y7VYgAtW2Uf1DPOIYMdvo6fxIB5i9ZfISgcJ/bbCUkFrhoH
+vq/5CIWxCPp0f85R4qxxQ5ihxJ0YDQT9Jpx4TMss4PSavPaBH3RXow5Ohe+bYoQ
NE5OgEXk2wVfZczCZpigBKbKZHNYcelXtTt/nP3rsCuGcM4h53s=
-----END RSA PRIVATE KEY-----

ダブルクォーテーションを消すのには jq の -r オプションを使ってます。
teeコマンドは標準出力にもちゃんとできたこと見せたいから。

References

  1. create-key-pair — AWS CLI 1.3.21 documentation
  2. jqに痺れた … AWS CLIで演習など – OpenGroove
  3. teeコマンドの使い方 – Qiita
  4. vagrant/keys/vagrant at master · mitchellh/vagrant

awscliでキーペア(鍵ペア)を一括削除する

概要

AWSAPIの練習とシェルスクリプトの練習も兼ねてる。

AWS APIを叩く練習をしていてキーペアをいっぱい作っちゃいました。
こんな感じ。

% aws ec2 describe-key-pairs| jq -r '.KeyPairs [] .KeyName'
default
default2
default3
default4
default5
default6
default7
default8

ちなみにjqの -r オプションはダブルクォーテーションを消してくれるオプション。

これらのキーペアを消したい。

find+xargsを使う(失敗)

find+xargsの組合せに慣れてるから以下の様な感じにしたくなる。

aws ec2 describe-key-pairs | jq -r '.KeyPairs [] .KeyName' | xargs aws ec2 delete-key-pair --key-name
Unknown options: default3, default4, default5, default6, default7, default8, default2

でもエラー。xargsのmanページをよく見てみる。

Man page of XARGS

xargs は標準入力から読み込んだ一連の項目をその後ろに 追加していく (訳注: 作成されたコマンドラインが、
コマンドライン長の上限を 越える場合や、オプションによる特別な指定がある場合は、入力を適宜分割して、
command を複数回実行することになる)。標準入力における空行は無視する。

そういえば

find | xargs rm

find | xargs grep hoge

は引数に複数のエントリをもたせられた気がする・・・。

1個ずつ削除したいのでこれは使えない。

while+readを組み合わせる(成功)

aws ec2 describe-key-pairs | jq -r '.KeyPairs [] .KeyName' | while read key; do
aws ec2 delete-key-pair --key-name $key
done

これならどうだ。

% aws ec2 describe-key-pairs | jq -r '.KeyPairs [] .KeyName' | while read key; do
pipe pipe while> aws ec2 delete-key-pair --key-name $key
pipe pipe while> done
{
"return": "true"
}
{
"return": "true"
}
{
"return": "true"
}
{
"return": "true"
}
{
"return": "true"
}
{
"return": "true"
}
{
"return": "true"
}
{
"return": "true"
}

あっ、うまくいった。
やったきもちいいいいい。

References

  1. jq
  2. jqに痺れた … AWS CLIで演習など – OpenGroove
  3. jqコマンドを使ってみた – mknkisk report
  4. Bash – パイプ出力を現在のシェル上のwhileに喰わせる上手いやり方 – Qiita