jqコマンドを使ってaz,awsコマンドの出力結果からssh_configを生成する

awsに接続してssh_configを生成するec2sshというツールがあるのだけど、awsやazコマンドで得たjsonをjqで加工して似たようなことができそうだなと思ったのでやってみた。
awsの場合は、以下のようにaws-cliでec2の情報を取得してjqに渡してやればいい。ユーザ名は取得できないので、必要であればjqの処理のとこに(決め打ちになってしまうが)追記してやればいい。

aws ec2 describe-instances | jq -r '.Reservations[].Instances[]|(.Tags[]|select(.Key == "Name")|.Value) as $v|"Host "+$v+"\n   HostName "+.PublicIpAddress+"\n"'
Sponsored Links

Azureの場合、azコマンドを使って以下のようにする。こっちの方はAdminUsernameという項目をちゃんと持ってるので、そこからユーザ名を取得できる。
ただ、デフォルトだとIPアドレスが取得できないため、-dを付与する必要がある点に注意(で、付与するとクエリ結果返ってくるのが遅くなるという…)。

az vm list -d | jq -r '.[] | select(.osProfile.linuxConfiguration != null) | "Host "+.name +"\n    HostName " + .publicIps + "\n    User " + .osProfile.adminUsername + "\n"'

 

こんな感じで、AWSやAzure上で稼働しているインスタンスのssh_configが生成できる。


Written by blacknon

インフラエンジニア(…のつもり)。 仕事で使うならクライアントはWindowsよりはUNIXの方が好き。 大体いつも眠い。

Leave a Comment

メールアドレスが公開されることはありません。

*