SSHした際に可愛いキャラに出迎えられたい!!

こんにちは、私は関西でサーバーエンジニアをしている者です!

普段は「インフラ技術部」にてLinux関連の情報を中心にブログを書いています。

https://r1999.com/


本題に戻りますが、サーバーエンジニアにとって、SSHは使用頻度の高いツールの一つではないでしょうか？

しかし、ログインした際に表示されるターミナル画面は、非常に味気なく寂しいものです..

また、複数のサーバーに同時にログインし作業をしていると、誤って別のホストでコマンドを実行してしまう…なんて経験をされた方も多いのではないでしょうか？

今回は SSHログイン時にサーバー情報を表示するウェルカムスクリプトを作成してみました！

## 1.表示項目

今回、ウェルカムスクリプトでログイン時に表示する情報は以下の4つとしました。


| 項目          | コマンド                        |
|---------------|---------------------------|
| ユーザーネーム | whoami              |
| ホスト名      | hostnameまたはuname -n            |
| OS            | grep PRETTY_NAME /etc/os-release |
| カーネルのバージョン | uname -r       |


## 2. 出力のデザイン

ログイン時の出力は以下のようにしました。

アスキーアートは自力ではできなかったので「カルシファー」をモチーフに、AI（ChatGPT）に生成してもらいました。

ただし有料版のChatGPTでもアスキーアートの生成は苦手なようで苦労しました。

```
                      Welcome to the system!!
      ▄▄███▄▄        ┌───────────────┬─────────────────────────────────────────┐
   ▄█▀▀░░░▀▀█▄       │ OS            │ Rocky Linux 9.1                         │
  █▀▄░█░░█░▄▀█       ├───────────────┼─────────────────────────────────────────┤
  █░░▀▀░▀▀░░█        │ Hostname      │ ********                                │
   ▀▄░░░░░░▄▀        ├───────────────┼─────────────────────────────────────────┤
     ▀█▄█▄▀          │ User          │ ****                                    │
    ▄█▀░░▀█▄         ├───────────────┼─────────────────────────────────────────┤
   █░░░░░░░█         │ Kernel        │ *******************.x86_64              │
    ▀▀▀▀▀▀▀          └───────────────┴─────────────────────────────────────────┘

```

## 3.OSごとの色分け

さらにOSごとにに色を変える条件を取り入れました。

これにより複数のサーバーを扱う場合でも視覚的にに環境を識別できるようにしました。

| OS             | 色         | ANSIコード |
|----------------|------------|------------|
| Rocky Linux    | 緑         | `\033[32m` |
| Red Hat        | 赤         | `\033[31m` |
| Ubuntu         | オレンジ   | `\033[33m` |
| CentOS         | 紫         | `\033[35m` |
| その他（デフォルト） | 白         | `\033[37m` |

## 4.スクリプト全体

以下完成したスクリプトです。

```sh
#!/bin/bash

USERNAME=$(whoami)
HOSTNAME=$(hostname)
PRETTY_NAME=$(grep PRETTY_NAME /etc/os-release | cut -d= -f2 | tr -d '"')
KERNEL_VERSION=$(uname -r)

set_color() {
    case "$PRETTY_NAME" in
        *"Rocky Linux"*)
            printf "\033[32m"
            ;;
        *"Red Hat"*)
            printf "\033[31m"
            ;;
        *"Ubuntu"*)
            printf "\033[33m"
            ;;
        *"CentOS"*)
            printf "\033[35m"
            ;;
        *)
            printf "\033[37m"
            ;;
    esac
}

set_color
printf "                      Welcome to the system!!\n"
printf "      ▄▄███▄▄        ┌───────────────┬─────────────────────────────────────────┐\n"
printf "   ▄█▀▀░░░▀▀█▄       │ %-13s │%-41s│\n" "OS" "$PRETTY_NAME"
printf "  █▀▄░█░░█░▄▀█       ├───────────────┼─────────────────────────────────────────┤\n"
printf "  █░░▀▀░▀▀░░█        │ %-13s │%-41s│\n" "Hostname" "$HOSTNAME"
printf "   ▀▄░░░░░░▄▀        ├───────────────┼─────────────────────────────────────────┤\n"
printf "     ▀█▄█▄▀          │ %-13s │%-41s│\n" "User" "$USERNAME"
printf "    ▄█▀░░▀█▄         ├───────────────┼─────────────────────────────────────────┤\n"
printf "   █░░░░░░░█         │ %-13s │%-41s│\n" "Kernel" "$KERNEL_VERSION"
printf "    ▀▀▀▀▀▀▀          └───────────────┴─────────────────────────────────────────┘\n"
printf "\n"

printf "\033[0m"

```

## 4.設定

　今回は「.bashrc」に記述し設定します。

「$PS1」が設定され、かつスクリプトが存在する場合に実行するように設定しました。

```sh
if [ -n "$PS1" ] && [ -f ~/スクリプト ]; then
    ~/スクリプト
fi
```

## 5.まとめ&今後の改善点

いかがでしたでしょうか？

今回のスクリプトは複数サーバーを扱う際に、非常に役立つと感じました!!

また、ログインのたびにアスキーアートが目に入るので、普段の味気ないターミナル作業が少しだけ楽しくなった？と感じています!

課題として、ターミナルの幅が小さい時に表示が崩れる場合がありますので、今後修正できるように勉強します!!