-
Notifications
You must be signed in to change notification settings - Fork 3
/
check
executable file
·154 lines (132 loc) · 4.82 KB
/
check
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#!/usr/bin/env sh
# 軽量ファイルの暗号化・復号確認スクリプト (UTF-8)
# ================================================
#
# ファイルの暗号化と復号が正常にできるか確認します。相手が同じスクリプトを使った
# 場合、正常に復号できるかの確認に利用します。
#
# - 基本動作
# GitHub 上で公開されている(https://github.com/<user name>.keys で取得できる)
# あなたの RSA 公開鍵を使って暗号化されたファイルを、ロカールの秘密鍵で復号/平文
# 化を行い、元データと復号データの比較を行います。
#
# - 使い方の例:
# $ ./check.sh KEINOS ../.ssh/id_rsa
#
# - 注意:利用前にスクリプトに実行権限を与えるのを忘れないでください。
#
# -----------------------------------------------------------------------------
# Requirement check
# -----------------------------------------------------------------------------
if ! type openssl 2>/dev/null 1>/dev/null; then
echo >&2 '暗号化に必要な openssl コマンドがインストールされていません。'
exit 1
fi
PATH_DIR_BIN="$(cd "$(dirname "$0")" && pwd)"
getRandStr() {
openssl rand -hex 16 2>&1
}
# ヘルプ表示
# ----------
if [ $# -lt 2 ]; then
echo
echo "使い方: ${0} <github user> <id_rsa>"
echo
echo "- <github user> : あなたの GitHub アカウント名"
echo "- <id_rsa> : GitHub で公開している公開鍵のペアとなる秘密鍵のパス"
echo
exit 1
fi
# コマンド引数取得
# ----------------
USERNAME="$1"
SECRETKEY="$2"
if [ ! -r "$SECRETKEY" ]; then
echo >&2 "秘密鍵ファイル ${SECRETKEY} が見つかりません。"
exit 1
fi
if ! RESULT="$(openssl rsa -in "${SECRETKEY}" -text 2>&1 >/dev/null)"; then
echo >&2 "秘密鍵ファイル ${SECRETKEY} がサポートしていないフォーマットです。"
echo >&2
echo >&2 "Error(openssl)"
echo >&2 "$RESULT"
exit 1
fi
# trap の設定
# -----------
# スクリプト終了後サンプルファイルを削除します。
# - 参考URL : https://qiita.com/m-yamashita/items/889c116b92dc0bf4ea7d
trap "rm -rf ./sample.*" 0
# サンプル・テキストの作成
# ------------------------
if ! SAMPLETEXT="$(getRandStr)"; then
echo >&2 'OpenSSL によるランダム値の取得に失敗しました。'
echo >&2 "エラー内容: ${SAMPLETEXT}"
exit 1
fi
# サンプル・ファイル名設定
# ------------------------
FILENAME="${SAMPLETEXT}"
PATHFILE="./sample.${FILENAME}.txt"
# サンプル・ファイルの作成
# ------------------------
printf "%s" "サンプル・ファイルを作成しています ... "
if ! echo "$SAMPLETEXT" >"$PATHFILE"; then
echo >&2 "NG:サンプル・ファイルの作成に失敗しました。"
echo >&2 "サンプル・ファイル名: ${PATHFILE}"
exit 1
fi
echo "OK"
# サンプル・ファイルの暗号化
# --------------------------
printf "%s" "サンプル・ファイルを暗号化しています ... "
if ! RESULT=$("$PATH_DIR_BIN"/enc "$USERNAME" "$PATHFILE" 2>&1); then
echo >&2 "NG:サンプル・ファイルの暗号化に失敗しました。"
echo >&2 "スクリプトの実行権限、ディレクトリの書き込み権限などを確認ください。"
echo >&2
echo >&2 "Error(enc):"
echo >&2 "${RESULT}"
exit 1
fi
echo "OK"
# サンプル・ファイルの復号
# ------------------------
printf "%s" "暗号ファイルを復号しています ... "
if ! RESULT=$("$PATH_DIR_BIN"/dec "$SECRETKEY" "${PATHFILE}.enc" "${PATHFILE}.dec" 2>&1); then
echo >&2 "NG:暗号ファイルの復号中にエラーが発生しました。"
echo >&2 "スクリプトの実行権限、ディレクトリの書き込み権限などを確認ください。"
echo >&2
echo >&2 "Error(dec):"
echo >&2 "${RESULT}"
exit 1
fi
echo "OK"
# サンプル・ファイルの比較
# ------------------------
printf "%s" "オリジナルと復号ファイルを比較しています ... "
if ! diff "$PATHFILE" "${PATHFILE}.dec"; then
echo >&2 "NG:オリジナルと復号されたファイルが異なります。"
echo >&2 "オリジナル:"
cat "${PATHFILE}" >&2
echo >&2
echo >&2 "復号:"
cat "${PATHFILE}.dec" >&2
echo >&2
exit 1
fi
echo "OK"
# サンプル・ファイルの削除
# ----------------------
printf "%s" "サンプル・ファイルの削除中 ... "
if ! (rm "$PATHFILE" && rm "${PATHFILE}.enc"); then
echo >&2 "NG:一時ファイルの削除に失敗しました。 手動で削除してください。"
echo >&2 "ファイル名: ${PATHFILE}"
exit 1
fi
echo "OK"
# 終了表示
# --------
echo
echo "暗号化・復号のテストを終了しました。"
echo "✅ 問題なさそうです。"
echo