web-dev-qa-db-ja.com

macOS 10.12(Sierra)へのアップグレード以降、Capistranoでコードをデプロイする際の問題、「Permission denied(publickey)」。

そのため、Mac mini(Late 2012)をmacOS 10.12(Sierra)にアップグレードしたばかりで、すべて問題ないように見えますが、 Capistrano でコードをデプロイするという奇妙な問題に直面しています。次のエラーが表示されます。

Permission denied (publickey).

Mac OS X 10.11(El Capitan)またはそれ以前のバージョンでは、これまでこの問題は発生していません。なぜこれが突然起こっているのですか?失敗したCapistranoデプロイメントの完全な出力は次のとおりです。

jakes_mac:SomeCode jake$ cap staging deploy
INFO [hkdgad21] Running /usr/bin/env mkdir -p /tmp/somecode/ as [email protected]
DEBUG [hkdgad21] Command: /usr/bin/env mkdir -p /tmp/somecode/
[email protected]'s password:
INFO [hkdgad21] Finished in 5.166 seconds with exit status 0 (successful).
DEBUG Uploading /tmp/somecode/git-ssh.sh 0.0%
INFO Uploading /tmp/somecode/git-ssh.sh 100.0%
INFO [xyz20312] Running /usr/bin/env chmod +x /tmp/somecode/git-ssh.sh as [email protected]
DEBUG [xyz20312] Command: /usr/bin/env chmod +x /tmp/somecode/git-ssh.sh
INFO [xyz20312] Finished in 0.240 seconds with exit status 0 (successful).
INFO [abcdef01] Running /usr/bin/env git ls-remote --heads [email protected]:SomeUser/SomeCode.git as [email protected]
DEBUG [abcdef01] Command: ( GIT_ASKPASS=/bin/echo GIT_SSH=/tmp/somecode/git-ssh.sh /usr/bin/env git ls-remote --heads [email protected]:SomeUser/SomeCode.git )
DEBUG [abcdef01]    Permission denied (publickey).
DEBUG [abcdef01]    fatal: Could not read from remote repository.
DEBUG [abcdef01]
DEBUG [abcdef01]    Please make sure you have the correct access rights
DEBUG [abcdef01]    and the repository exists.
(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as [email protected]: git exit status: 128
git stdout: Nothing written
git stderr: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

SSHKit::Command::Failed: git exit status: 128
git stdout: Nothing written
git stderr: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Tasks: TOP => git:check
(See full trace by running task with --trace)
The deploy has failed with an error: Exception while executing as [email protected]: git exit status: 128
git stdout: Nothing written
git stderr: Permission denied (publickey).
fatal: Could not read from remote repository.

正しいアクセス権があり、リポジトリが存在することを確認してください。

16
JakeGould

これはmacOS SierraまたはOpenSSHに接続されたものからの予期される動作ですか?

これはOpenSSH 7.2の新機能により、SSHクライアント側の動作が変更されるためです。 リリースノート から:

 ssh(1): Add an AddKeysToAgent client option which can be set to
   'yes', 'no', 'ask', or 'confirm', and defaults to 'no'.  When
   enabled, a private key that is used during authentication will be
   added to ssh-agent if it is running (with confirmation enabled if
   set to 'confirm').

このリリースは主にバグ修正リリースと見なされていましたが、他の興味深い(セキュリティ関連の)機能も導入されました。この特定の機能により、OS Xのデフォルトの動作が変更されました。デフォルト値は「no」であり、OS X(他のクライアントについては知りません)は以前に使用時にエージェントにキーを追加したためです。

したがって、以下を~/.ssh/configファイル(またはssh_configに配置する必要があるグローバル/etc/ssh/ssh_config)に追加すると、キーは使用時にエージェントに再び追加されます。

AddKeysToAgent yes

このワンライナーにより、非常に簡単になります。

echo "AddKeysToAgent yes" >> ~/.ssh/config

これを行った後、私は期待される動作を達成することができました:

$ ssh-add -l
The agent has no identities.
$ ssh -T [email protected] 
logged in as davidalger.

You can use git or hg to connect to Bitbucket. Shell access is disabled.
$ ssh-add -l
2048 SHA256:<snip> (RSA)
8
davidalger

これにより、MacOS Sierraの問題を解決できます。

eval $(ssh-agent -s) 
ssh-add ~/.ssh/id_rsa_file
0
rc.adhikari