AppleScriptからキーチェーン項目を読み出す方法

[主題]
AppleScriptにおいて、パスワードを安全に取り扱う方法を説明したい。

[背景]
AppleScriptを用いて、SMBドライブをマウントする場合、ユーザ名とパスワードが必要になる。これは一例であり、他にもAppleScriptでパスワードを入力するケースはあるだろう。
対応方法はいくつかあるが、最も安全に取り扱うのは、キーチェーンアクセスにパスワードを管理してもらう方法だと考える。
ところが、ここでひとつ問題が生じた。筆者の検索技術の問題かも知れないが、AppleScriptからキーチェーンに保存されたパスワードを参照する手段が見つからなかったのだ。
遠い昔、Mac OS X 10.7で廃止になったKeychain Scriptingや、現在では動かないFrameworkを用いる方法など、インターネット上の資源に愛想が尽きかけた時、やっと光が見えた。
それが、今回紹介するsecurityというOSビルトインコマンドである。

[環境]
参考までに、筆者の環境を記載しておく
MacBook Pro 2018 15.4inch(インテルMac)
macOS 12.6 Monterey

[手順]

  1. キーチェーンアクセスを用いた新規パスワード項目の作成
    LaunchPadのその他の項目から、キーチェーンアクセスを起動する。起動したら、下図を参照して、新規パスワード項目を作成する。(筆者は、ログインキーチェーンに項目を作成した)

    新規パスワード項目

    記入する項目は、キーチェーン項目名と、アカウント、それにパスワードである。筆者は項目名はAS_MountSMB、アカウントとパスワードは、マウントするMacのログインアカウントを入力した。

    パスワード項目設定

  2. securityコマンドによるアカウントの読み出し
    項目1で作成したパスワード項目から、アカウントを読み出すには、次のコマンドを実行する。

    security find-generic-password -l AS_MountSMB | grep acct | cut -d = -f2 | sed 's/\"//g'
  3. securityコマンドによるパスワードの読み出し
    項目1で作成したパスワード項目から、パスワードを読み出すには、次のコマンドを実行する。

    security find-generic-password -l AS_MountSMB -g -w
  4. AppleScriptへの組み込み
    AppleScriptでsecurityコマンドを利用するには、do shell scriptを用いる。

    アカウント

    set userAccount to do shell script "/usr/bin/security find-generic-password -l AS_MountSMB | grep acct | cut -d = -f2 | sed 's/\"//g'"

    パスワード

    set userPass to do shell script "/usr/bin/security find-generic-password -l AS_MountSMB -g -w"
  5. スクリプト例
    SMBディスクをマウントするAppleScriptの例を以下に示す。

    set userAccount to do shell script "/usr/bin/security find-generic-password -l AS_MountSMB | grep acct | cut -d = -f2 | sed 's/\"//g'"
    set userPass to do shell script "/usr/bin/security find-generic-password -l AS_MountSMB -g -w"
    
    set smbMachine to "smb://Macの名前._smb._tcp.local/"
    
    set smbDisk to "マウントするディスク名"
    set thePath to smbMachine & smbDisk
    
    try
        with timeout of 100 seconds
            mount volume thePath as user name userAccount with password userPass
        end timeout
        --on error
    end try

参考サイト

以上。

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL