Mac OS X Lionで毎回パスフレーズを入力せずにログインするためにSSH秘密鍵を使用する方法


23

私はMac OS X Lionを使用して、毎日SSH経由でリモートホストにログインしています。リモート認証にSSHキーペアを使用し、すべてのホストのログインフレーズを自動化する必要はありませんが、端末がSSH秘密キーにアクセスするためのパスフレーズを要求するのは依然として非常に面倒です。

セキュリティ上の理由から、SSH秘密鍵にアクセスするためのパスフレーズが必要だと思います。端末が起動時に一度だけフレーズを要求し、それを記憶し、その後のSSHセッションで秘密鍵を自動的に使用する方法はありますか?

keychainGentoo Linuxで正常に動作するというスクリプトがあります。しかし、私はMac OS X Lionでそれを理解することはありません。さらに重要なこと、のようなので、多くの威圧的な用語は、ありますssh-agentssh-add。それらのSSHツールキットに関するさまざまな資料を読み、いらいらする実験を行った後、私はさらに混乱しました。

そのため、StackExchangeに来て、次の質問に関するアドバイスを探しました。

  1. どのようなものがありssh-agentssh-addkeychainKeychain Access.appそしてどのように彼らは互いに相互作用?
  2. ログイン時に一度、SSH秘密鍵のパスフレーズを入力し、後のSSHセッション作成で自由に使用するにはどうすればよいですか?
  3. エラー...何が問題なのKeychain Access.appですか?以前のようにSSHフレーズを保存しません。

ここで行ったことをリストします。うまくいけば、私が逃したステップについての手がかりがあります。

手順1. MacでSSHキーペアを作成します。

$ ssh-keygen -t rsa -C "me@email.com"
# Set a passphrase for accessing the private key.

ステップ2. SSH公開鍵をリモートホストにコピーします。例として、Macのローカルホストにキーをコピーします。

$ ssh-copy-id USER@localhost
# Enter the login password for USER at localhost, not my SSH passphrase

ステップ3.次に、SSHキーペア認証を介して、リモートホスト(ここではlocalhost)への接続を試みます。

$ ssh USER@locahost
Enter passphrase for key '/Users/YOUR_ACCOUNT/.ssh/id_rsa': 
# Enter my SSH passphrase, not the login password.

手順4.リモートホストからログアウトし、接続を再試行します。くそー、ターミナルは再びSSHフレーズを要求します。

よくある質問は、「ssh-agentはMacでうまく機能しますか?」です。率直に言って、私はこれらのことで何が起こっているのか分かりません。ここにいくつかの実行結果を示します。

$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(EMPTY)
$ ssh-add -l
Could not open a connection to your authentication agent.
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-Z54zXukQiP/agent.26769; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26770; export SSH_AGENT_PID;
echo Agent pid 26770;
$ ssh-add -l
Could not open a connection to your authentication agent.
$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(STILL EMPTY)
$ ssh-agent  # Oh no, anther ssh-agent with different PID
SSH_AUTH_SOCK=/tmp/ssh-cx0B4FUX8B/agent.26898; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26899; export SSH_AGENT_PID;
echo Agent pid 26899;
$ ps -e | grep -i ssh
26769 ??         0:00.03 ssh-agent
26899 ??         0:00.02 ssh-agent

どんなフィードバックも歓迎します。ありがとう!


関連。受け入れられた回答をユースケースに適応させることができます。
ダニエルベック

回答:


12

ssh-agentまさにあなたが求めていることをしているので、あなたが働きたいと思う作品です。エージェントはデーモンとして実行され、秘密キーを「追加」すると、そのキーが記憶さsshdれ、初期接続時にリモートに自動的に提供されます。(ssh-add単に秘密鍵を手動で追加するために実行するコマンドですssh-agent)。

OS Xでは、ヒョウのように、あなたが実行する必要はありませんssh-agentか、ssh-add手動で。サーバーに接続しようとすると「発生する」はずです。キーごとに1回、UIパスワードダイアログが表示されます。これにより(特に)キーを自動的に追加できるssh-agentため、再度プロンプトが表示されることはありません。

これはlaunchd$SSH_AUTH_SOCKソケット上の接続をリッスンし、ssh-agent最初に必要なときに自動的に起動する構成を持つことで処理されます。その後ssh-agent、新しいキーを開く必要がある場合にのみ資格情報の入力を求められます。

それが機能しない場合は、正しいlaunchd構成ファイルが存在することを確認してください。

/System/Library/LaunchAgents/org.openbsd.ssh-agent.plist

何らかの理由でまだ動作しない場合は、手動で実行する「古い」方法を次に示します。

http://timesinker.blogspot.com/2007/08/getting-ssh-agent-going-on-mac-osx.html

このアプリケーションもあります。Leopardが登場してから使用を停止しましたが、基本的にMac OS Xの以前のバージョンでも同じことをしました。

http://www.sshkeychain.org/


4
ありがとう、マイケル・エデンフィールド。何が間違っているのかがわかり、Mac OS X Lionでssh-login-without-passphraseが完全に機能するようになりました。私はいくつかの愚かなことをした-私はシンボリックリンクを作っ~/tmp指し/tmp/そしてきれいにするcronジョブを実行して~/tmpも、ssh-agentのソケットを取り外し、すべての2時間を、。ああ、私は自分が嫌いです。
ジャンウェンW.

13

「問題」を解決するプロセスの間に、私はいくつかの関連トピックをGoogleで検索して方法についていくつかのメモ書きましたssh-agentssh-addkeychainKeyChain Access.app仕事を。それは最終的にこの問題ではなく、問題は私についてのすべてであり、いわゆる、すべての問題ではないことが判明し、パスフレーズごとに時刻を尋ねることにsshログイン-せずに、箱から出してMac上で完璧に動作します。

ただし、このプロセスにより、いくつかの経験が得られます。ここでメモを書き留めて、それらの用語について混乱を招く誰かを助けることを期待しています。

2つのパスワード用語:

  • passphrase SSH秘密鍵にアクセスするときに必要なフレーズを指します。
  • password Macにログインするために必要なフレーズを指します。

今、私は、あること、これらのツールキットは何をすべきかを把握することができ ssh-agentssh-addkeychainKeychain Access.appMac上で。

  • ssh-agentSSHパスフレーズを入力せずにSSH秘密キーを使用できるようにするための重要なサービスです。ssh-agentこのように動作します。まず、SSH秘密鍵をメインメモリに保存またはキャッシュします。その後、このセッションの後半で、リモート認証にSSHプライベートSSHキーが必要にssh-agentなると、メインメモリでプライベートキーを見つけて、リモートプロセスに渡します。SSHパスフレーズの入力を求められるのは、ssh-agent最初に秘密鍵が追加されたときだけです。
  • ssh-addssh-agentコレクションの一部であり、SSHキーの管理に役立ちますssh-agentssh-addコマンドを使用して、ssh-agentのキーリングの秘密キーを一覧表示、追加、削除します。次にssh-addssh-agentサービスと通信してタスクを実行します。
  • keychainssh-agentサービスを見つけ(存在しない場合は新しいサービスを開始)、ssh-addSSH秘密キーを追加するために呼び出すスクリプトです。keychainssh-agentが通常自動的に起動しないLinuxで正常に動作する、シンプルでわかりやすいアイデアを持っています。
  • Keychain Access.app最も複雑なコンポーネントのようです。これは、Mac OS Xのユニバーサルトークンストレージサービスです。パスワード、証明書などのさまざまなトークンを保存し、トークンを要求するアプリのトークンエージェントとして機能します。SSH秘密鍵の場合、まずSSH秘密鍵へのアクセス要求を把握し、ウィンドウをポップアップして、一種のトークンであるSSHパスフレーズをKeychain Access.appのキーリングに保存するように求めます。次に、認証に秘密鍵を使用するときにKeychain Access.app、再びウィンドウをポップアップして、特権を付与するかどうかを尋ねます。大きくなっkeychain Access.appたら、秘密鍵をssh-agentのストレージに追加します。

次の2つの点に注意してください。

  1. Mac OS X Lionは、ssh-agent起動時に自動的にサービスを開始し、の下のソケットをリッスンします/tmp
  2. Keychain Access.appSSHパスフレーズを保存するため、ユーザーssh-agentを中断することなく秘密鍵を追加できます。はい、SSHフレーズを入力する必要はありませんが、このエントリを初めて作成するときに特権を付与するためにMacアカウントのログインパスワードを入力する必要があります。

したがって、要約すると、SSH-login-without-asking-passphraseはそのままMac OS Xで動作するはずです。


1

ここの他のソリューションが人々のために働かない場合、次は私のために働いた。

〜/ .sshディレクトリ内のすべての秘密鍵について、対応する公開鍵も存在することを確認してください。公開鍵の名前は、秘密鍵とまったく同じですが.pub、最後に付けてください。適切な公開キーが既にある場合は、再生成してみてください。

公開鍵を再作成する必要がある場合は、簡単に再作成できます。

ssh-keygen -y -f ~/.ssh/my_key > ~/.ssh/my_key.pub

my_keyキーが呼び出されたものに置き換えます。

その後、MacOSはキーチェーン内のキーパスフレーズを必要に応じて記憶します。

注-パスフレーズを入力してキーチェーンを保存することは1回限りのアクションです(OPが望むようにログインセッションごとに1回ではありません)が、問題のMacへのログインがパスワードで保護されていると仮定すると、パスフレーズはそのログインパスワードで保護されます。また、この解決策は私には意味がありません...秘密鍵に加えて公開鍵は必要ではありませんが、何らかの理由でMacOSXはそれを必要とします。

(元はApple Stack Exchangeの同様の質問への回答から)


1

~/.sshフォルダーの構成に関して私がめったに言及していないことの1つは、ディレクトリのアクセス許可を制限することです。

sshがパスワードを要求しないようにするには、ユーザーのホームディレクトリのアクセス許可を700に設定し、~/.sshフォルダーのアクセス許可700も設定する必要がありました。

そうしないと、すべてのキーが正しく生成およびコピーされた場合でも、パスワードの入力を求められます。エラーログは認証ログに生成されますが、これはエンドユーザーにはほとんど見えません。


0

あなたが試みることができた別のことはのssh-copy-idようなものに取り替えることであったでしょうk="$(cat ~/.ssh/id_rsa.pub)"; ssh username@somehost.com "umask 0077; mkdir -p ~/.ssh; echo "$k" >> ~/.ssh/authorized_keys2"


0

この答えは、この質問に対する解決策ではありません。しかし、それは非常に近い(私は私の問題の解決策を探しているときにこの質問に終わった)。

この質問で説明したように、Mac上のリモートサーバーに対しても多くのSSHを実行しますが、Keychain Access.appアプリはキーフレーズを保存していたため、SSHサーバーで認証するためにキーが必要になるたびにキーフレーズを入力する必要はありません。

ただし、MacでSSHサーバーを有効にして、リモートで接続できるようにしました。Macにリモートでログインすると、キーフレーズは常に別のホストをSSHで接続したいときに尋ねられました。

キーフレーズを現在のセッションで保存できるソリューションを見つけました。私はこれが誰かに役立つと思ったので、この投稿/回答。


私はここに私の同様のソリューションを書き留めたsuperuser.com/a/659668/154113
orkoden

0

私はこの問題について困惑しています。sshは、Apple以外の部門のすべてのマシンで機能します(MacBookまたはiMacは関係ありません)。私はついにパスワードの入力にうんざりし、これをデバッグすることにしました。

iMacに行き、共有設定パネルでsshdを無効にしました。その後、rootにsuし、「/ usr / sbin / sshd -d」と入力して、デバッグモードでsshdを起動しました。それから私はそのマシンにsshを試み、すぐにプロトコル2を使用しようとしましたが、すべてがうまく使用されているようですが、sshdはすぐに「authorized_keys」が見つからないことを報告しました。linux、solaris、you-name-it unixボックスのすべてが問題なく受け入れられるauthorized_keys2ファイルがありました。authorized_keys2をauthorized_keysとBOOMにコピーしただけです。今完璧に動作します。

* keys2ではなく* keysが不明な理由。特に、os xがknown_hosts2に非常に満足している場合。

いずれにせよ、今ではすべてのアップルボックスにログインするか、その爆発したパスワードなしでリモートコマンドを実行できます:prompt ...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.