RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

SSHでログインしたら「(ドット絵風)好きなキャラクターでおはやいます!」してほしい!

こんにちは、あるいはこんばんは。すぱ..すぱらしいサーバサイドのエンジニアの(@taclose)です☆

みなさん前回の記事でsshのログインは楽に出来るようになりました!

前回の記事: 実践sshコマンド:基本からオススメの設定 / ノウハウをまとめたよ! - RAKUS Developers Blog | ラクス エンジニアブログ

しかし!ここで問題になるのが安易にログインできるが故に間違ってログインしちゃう問題です。

そこで今回は間違ってログインしないように ログインしたら好きなキャラクターにおはやいます!してもらいましょう!
これでログインしたサーバが自分用の開発サーバなのか、真面目にやってる検証環境なのか一目瞭然ですね!

ログインした時の画像を準備しよう!

手順は追って説明しますが、準備さえ整えば以下のようにコマンド1個で画像が作れて、アップロードもコマンド1つだけです!

sshでログインした時に表示される画像

著作権上アニメのキャラクターとかはこのブログでは扱えませんので、今回は以下のサイトから画像を準備しました。

無料ドット絵アイコン素材のピクセルガロー|ドット絵アイコンが使い放題

皆さまも子供の写真だったり「DEV」って書かれただけの画像でも構いませんのでご準備をっ

画像をテキストデータに変換しよう!

コンソールには当然ながら画像を表示する機能なんてありませんので、一旦用意した画像を変換する必要があります。本当は「画像サイズを小さくして、背景色を黒にして。。。」と手順が大変なのですがコマンドを用意しましたので、以下の手順に沿って作業を進めてください!

# ImageMagickをインストールする
$ yum install -y ImageMagick

下記のコマンドでmkmotdコマンドをダウンロードしてください。

$ wget --no-check-certificate "https://raw.githubusercontent.com/taclose/mkmotd/main/mkmotd" -O mkmotd

wgetコマンドを使えないよ!という方は以下のスクリプトmkmotdとか、好きな名前で保存してください!

#!/usr/bin/bash

# ImageMagickが使えるか?
if !(type "convert" > /dev/null 2>&1); then
  # 対象のコマンドをインストールするような処理
  echo "please install ImageMagick!!"
  echo "$ yum install -y ImageMagick"
  exit 1;
fi

#定数
tmp="tmp/temp_image";
dot_path="tmp/dot_image"

# DEFAULT 
path=""
size="32"
trans_position="0,0"
background="0;0;0"


# 環境準備
mkdir -p tmp

# OPTION GET
while getopts p:s:t:b:-: opt; do
  optarg="$OPTARG"
  [[ "$opt" = - ]] && opt="$OPTARG" && optarg="${!OPTIND}" && shift
  case $opt in
    p|path )            path="$optarg";           ;;
    s|size )            size="$optarg";           ;;
    t|trans-position )  trans_position="$optarg"; ;;
    b|background )      background="$optarg";     ;;
    * )                 echo "$0: illegal option -- ${opt##-}" >&2; exit 1 ;;
  esac
done

# CONFIRM
echo "path=$path"
echo "size=$size"
echo "trans_position=$trans_position"
echo "background=$background"

trans_position=(${trans_position//,/ })
transparent_after="$background"

# URLなら画像を取得する
if [[ $path =~ ^http ]] ; then
  echo "TASK: Download start."
  tmp_name=`basename "$path"`
  wget --no-check-certificate "$path" -O "$tmp_name" > /dev/null 2>&1
  path="$tmp_name"
  echo "new path=$path"
fi

# 透過したい色を取得する
echo "TASK: Transparent color get."
rgb=`convert "$path" -crop 1x1+${trans_position[0]}+${trans_position[1]} txt:- | tail -n1 | awk '{print $3}'`
echo $rgb
trans_r=`bc <<<"obase=10; ibase=16; ${rgb:1:2}"`
trans_g=`bc <<<"obase=10; ibase=16; ${rgb:3:2}"`
trans_b=`bc <<<"obase=10; ibase=16; ${rgb:5:2}"`
transparent_before="${trans_r};${trans_g};${trans_b}"

echo "get trans_color: $transparent_before"

# リサイズ処理をする
echo "TASK: Resize image."
convert "$path" -interpolative-resize ${size}x${size} -compress none "$tmp"
ppm=$(convert "$tmp" -interpolative-resize ${size}x${size} -compress none ppm:- 2>/dev/null)

# get cols, then discard ppm parameters
set ${ppm}
cols=${2}
shift 4

{
    # get three each values (rgb) from ppm
    for i in $(eval echo {1..${#}..3})
    do
        j=$((i+1))
        k=$((i+2))

        rgb="${!i};${!j};${!k}"

        # replace transparent color
        if [ ${rgb} == ${transparent_before} ] ; then
          rgb=${transparent_after}
        fi

        # start a new line when reach cols
        if [ $(( (${i} + 2) / 3 % ${cols} )) -eq 0 ] ; then
          echo -e "\033[48;2;${rgb}m  \033[m"
        else
          echo -en "\033[48;2;${rgb}m  \033[m"
        fi
    done
} > $dot_path

cat $dot_path

echo "COMPLEATE!! Let's Setting!!"
echo -e "\e[34;1m$ scp $dot_path {your-name}@{your-server}:/etc/motd\e[m"
exit 0

いざ、変換処理を実行!

# 実行権限ないなら $ chmod +x mkmotd を忘れずに!
$ ./mkmotd -p tmp/military_totsugeki.gif

最後にscpコマンドが出たら成功です!ローカルにtmp/dot_imageというファイルが出来上がってるはずです。

サーバに設定しよう!

最後に出てきたscpコマンドのようにしてもらえれば完成です!

# your-name, your-serverは各自のユーザ名やドメイン名にしてくださいね
$ scp tmp/dot_image your-name@your-server:/etc/motd

# 前回の記事でログインを簡易化した方は以下のようなコマンドにしてもOKです
$ scp tmp/dot_image __taclose.develop:/etc/motd

ログインしてみよう!

よし!ログインしてみましょう!

ログイン成功!

感動ですね!

付録

画像をもっと加工したい!

今回用意したスクリプトでは画像サイズや背景色とかを選べるように作ってありますので、以下のオプション指定の例を参考に試してみてください。

// 一番ミニマムな例 画像パスだけ指定
$ mkmotd.sh -p "logo.png"

// 一番ミニマムな例 画像URLだけ指定
$ mkmotd.sh -p "https://www.rakus.co.jp/images/common/favicon.png"

// フルで指定(デフォルト値)
$ mkmotd.sh --path "logo.png" --size 32 --trans-position 0,0 --background "0;0;0"

// サイズは48px、左上から5,5の座標の色が背景色、この背景色を赤にする
$ mkmotd.sh --path "logo.png" --size 48 --trans-position 5,5 --background "255;0;0"

各種オプション指定の意味は以下のようになっています。

コマンドのオプション

option default 説明
-p, --path 無し(必須指定) ファイルパスかhttpから始まるURLを指定してください。http指定の場合はwgetコマンドも必要です。
-s, --size 32 画像サイズを変更します。コンソール表示を考えると16~64辺りが妥当です。
-t, --trans-position 0,0 左上からの座標を指定。指定された座標にある色を背景色として変更対象とします。
-b, --background 0;0;0 背景色と指定された色をRGBで指定された色に変換します。0~255でRGBを指定してください。ex:赤なら"255;0;0"です。

終わりに

画像が可愛いものを使っているのでちょっとゆるい感じになりましたが、ログインしているサーバに間違いがないかを意識せずともクリアできるというのは案外大事な事です。
人間は文字を読まずにアイコンだけを見て操作している事って非常に多いので、皆さんも仕事のモチベーションアップのためにも「好きなキャラクターにおはやいます!」してもらってくださいね!
よし、私も好きなキャラクターを選び直そう!

参考文献

GitHub - taclose/mkmotd: sshでログイン時に表示するmotdのドット絵作成ツール
実践sshコマンド:基本からオススメの設定 / ノウハウをまとめたよ! - RAKUS Developers Blog | ラクス エンジニアブログ
sshログインした時に任意の画像を出現させるようにするのをDockerでしてみた - Qiita
無料ドット絵アイコン素材のピクセルガロー|ドット絵アイコンが使い放題


エンジニア中途採用サイト
ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
ご興味ありましたら是非ご確認をお願いします。
20210916153018
https://career-recruit.rakus.co.jp/career_engineer/

カジュアル面談お申込みフォーム
どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
以下フォームよりお申込みください。
rakus.hubspotpagebuilder.com

ラクスDevelopers登録フォーム
20220701175429
https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/

イベント情報
会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください!

◆TECH PLAY
techplay.jp

◆connpass
rakus.connpass.com

Copyright © RAKUS Co., Ltd. All rights reserved.