コマンドラインからリモートでキーチェーンにアクセスするにはどうすればよいですか?


23

キーチェーンにさまざまなパスワード(リモートメールサーバーなど)を保存しています。コマンドラインからローカルにログインすると、次の方法でこれらを取得できます。

security unlock-keychain ~/Library/Keychains/login.keychain
<enter password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com
<dumps keychain attributes, not including password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com -g
<dumps keychain attributes, including password>

ただし、リモートで実行した場合(他の場所からボックスにSSHで接続した場合)、結果は得られません。

security unlock-keychain ~/Library/Keychains/login.keychain
<enter password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com
<dumps keychain attributes, not including password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com -g
<nothing printed, to stdout or stderr>

さらに、最終コマンド(-gを使用)の戻り値は36です。

setローカルログインの出力をダンプし、リモートログインと比較しましたが、欠落している環境変数は次のとおりです。

Apple_PubSub_Socket_Render
GPG_AGENT_INFO
SECURITYSESSIONID
TERM_PROGRAM
TERM_PROGRAM_VERSION
TERM_SESSION_ID
XPC_FLAGS
XPC_SERVICE_NAME

私は何が欠けていますか?私が持っているSSH_AUTH_SOCK(から返された有効な値に設定しますssh-agent)。


回答:


11

調査するためにこれを再現するには、私は私のキーチェーンがに設定されていることがわかり、「アクセスを許可する前に確認。」だから私は実行するときfind-internet-passwordに、ローカルの-g旗、私は、ダイアログボックスを知らせる取得セキュリティがSMTP」に保存された機密情報を使用することを望んでいます。 gmail.com」をキーチェーンに追加します。「許可」をクリックすると機能し、「拒否」をクリックすると、sshケースと同様に失敗し、戻りコードが返されます51アクセス確認ダイアログ

を介してリモートでコマンドを実行するsshと、-gすぐにエラーが発生し、そのステータス36が報告されます。

これはssh、システムに入ったときに、securityコマンドがこの情報にアクセスすることを許可することを確認できるダイアログボックスをポップアップする方法がないためだと思われます。

sshコマンドをローカルで実行するときに、最初に[常に許可]オプションをクリックすることで、接続中にコマンドを機能させることができました。これにより、キーチェーンのアクセス許可が更新され、ダイアログに(ローカルでも)応答する必要がなくなり、リモートでも動作できるようになります。

これがあなたにとって完全に役立つかどうかはわかりませんが、securityリモートでアクセスする可能性のあるキーチェーンアイテムへのプログラムアクセスを先制的に許可する必要があることを意味すると思うので。これを行うスクリプトを作成することは可能ですか?

これを手動で実験していて、後でこのアクセスを取り消す場合は、キーチェーンアクセスで影響を受けるアイテムに移動し、[ 情報を見る]を選択して[ アクセス制御 ]タブを確認します。securityそこにエントリが表示されますが、削除できます:アクセス制御ダイアログ


私は同じことをしました-「セキュリティ」コマンドを「常にアクセスを許可する」リストに追加しました(ローカルでコマンドを発行するときに表示されるポップアップで「常に許可する」をクリックしても実行されます)その後、リモートでキーチェーンアイテムにアクセスします。変更する必要がある別の設定がどこかになければなりませんが、私はそれを見つけることができません。
エーテル

1
ahahaha-これ実際には機能しますが、キーチェーンの設定を変更した後、それらを有効にするには新しいセッションでログインする必要があります。やった!(私が今までにリモートでアクセス権限を変更する方法を見つけた場合、私はこの質問への答えを追加しますが、その後のリモート使用するため、事前に局部的に物事を設定することは今のところ許容されます。)
エーテル

2
またsecurity unlock-keychain ~/Library/Keychains/login.keychain、キーチェーンを使用しようとしているリモートセッションで実行することも重要です。これにより、パスワードの入力が求められるため、スクリプトで実行することはできません。パスワードなしでこれを達成する方法があるかもしれませんが、それはこの質問の範囲外です:)
Ether

セキュリティロック解除キーチェーンのコマンドラインにパスワードを入力できるかどうかは誰にもわかりますか?
-tofutim

1
@Etherキーチェーンがデフォルトの/Users/[user]/Library/Keychains/パスにある場合、フルパスを省略して、だけで進むことができますlogin.keychain
ソルガー

5

security -i unlock-keychain

MacOS 10.13.4 High Sierraで動作します。

karthickのソリューションを調査した結果、これが見つかりました。-iは、コマンドを対話式にし、ターミナルでパスワードの入力を求めます。


3

セキュリティキーチェーンがデフォルトの場所にある限り、以下のコマンドを実行してロックを解除できます。パスワードの入力は求められません。リモートで動作しました。

security unlock-keychain -p "enter password"


Ask Differentへようこそ!私たちは最良の答えを見つけようとしていますが、それらの答えはなぜ彼らが最高なのかを裏付ける情報を提供ます。回答は自己完結型である必要があるため、提供した回答が問題を解決するか、他の回答よりも優れていると考える理由を説明してください。サポート情報としてリンクを提供することも、OPをはじめとする他の人々が自分自身の追加情報を見つけるのに役立ちます。質の高い回答を提供する方法については、回答方法をご覧ください。-レビューから
fsb
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.