こちらの記事(どうしてもコマンドライン上でCiscoのVPN接続をしたい)を書いた際に、パスワードをスクリプト内にそのまま書いておりました。ただセキュリティ的によくないなと思っており、より安全にパスワードを取得する方法を調べたのでまとめておきます。私はMacユーザーなので、Macの場合のみを書きますが、同じような仕組みが他のOSにもあるんじゃないかと期待します。
やることは、
(1)キーチェーンアクセスにパスワードを登録し、
(2)CLIでパスワードを取得するということです。
主にこちらのサイトを参考にしました。
https://gotohayato.com/content/547/
1. キーチェーンアクセスにパスワードを登録
キーチェーンアクセスはMacのパスワードを安全に保管する仕組みだと理解しています。以下の通りに、まずはそこにパスワードを保存します。
キーチェーンアクセスを開き、デフォルトキーチェーン上で右上の書き込みアイコンを押す。
適当なキーチェーン項目名とアカウント名を入力後(これらは項目を見つける際にのみ使います)、保存したいパスワードを入力し、追加を押します。このキーチェーン項目名とアカウント名は項目を見つける際にのみ使うので、なんでもいいのですが、見つけやすいような項目名とパスワードに対応するアカウント名を使うといいかなと思います。ここでは例として"cisco_vpn_password"と"account_name"としてみましょう。
2. CLIでパスワードを取得する
次に登録したパスワードをターミナル上で取得してみます。
ターミナルやshellで
security find-generic-password -s [サービス名] -a [アカウント名] -w
とすると、キーチェーンアクセスに登録したパスワードを取得することができます。
上の例の場合なら、security find-generic-password -s cisco_vpn_password -a account_name -w
と入力します。
初回アクセス時には使用しているMacのパスワードを求められます。ここで「許可」を押せば今回だけキーチェーンへのアクセスを許可することになりますし、「常に許可」を押せば以降のパスワードの入力は必要なくなります。
おわりに
このような仕組みを使えば、shell上で自動的にパスワードを入力するということが可能になるので、より柔軟にスクリプトを作成することができそうですね。