そのため、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.
正しいアクセス権があり、リポジトリが存在することを確認してください。
これは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)
これにより、MacOS Sierraの問題を解決できます。
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa_file