Xcodeで開発をしていて、GitBucketにpushしようとしたら出来なくて困ったので解決策を残しておきます。
自身の環境はGitBucketですが、GitHubでもGitLabでも同様だと思います。
失敗した状態
こんな感じでhttp
でリモートリポジトリの設定をして
pushをすると、user/passwordの入力を求められます。
正しいuser/passwordを入力しているはずなのに成功せず、Cancelすると認証エラーのメッセージが出てきました。
Apacheのログを確認すると、Apacheまでは届いていて、401で返却しています。
xx.xxx.xxx.xx - - [30/Nov/2016:16:24:38 +0900] "GET /gitbucket/git/xxxx/xxxx.git/info/refs?service=git-receive-pack HTTP/1.1" 401 1019 "-" "git/1.0 (libgit2 0.24.0)"
Stack Overflowを漁っても、あまり良さそうな解決策が無い感じです。
下の記事の方で、Xcode accepts just ssh://git@my.domain.cz:2222/project-name
と言っていて、ソースは見当たらなかったのですが、sshならイケそうな感じです。
- git - Gitlab - Xcode Can't connect with remote repository - Stack Overflow
- git - Xcode - Authentication failed error when adding repository with SSH auth - Stack Overflow
まずは、そもそもGitBucketの方でSSH接続を許可する設定があるのか確認してみます。
GitBucketに管理者でログインし、System Settings
を確認するとEnable SSH access to git repository
という項目が!
チェックボックスにチェックを入れ、GitBucketのサーバのHostとSSHのPortを入力。(Portは特にこだわりが無かったのでそのままに)
SSHアクセスを許可する場合は、Base URLの設定も必要なので、GitBucketのURLを入力して設定を保存します。
ここで設定したSSHのPortで接続できるように、忘れずにFirewallの設定も修正し、restartしておきます。
これでユーザ毎にSSH Keyを登録することができるようになったので、鍵を生成します。(面倒だったのでパスフレーズ無し)
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/tenten0213/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/tenten0213/.ssh/id_rsa.
Your public key has been saved in /Users/tenten0213/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX tenten0213@Mac-mini.local
The key's randomart image is:
+---[RSA 2048]----+
| .. o.o.E*%|
| . ..... o.+ %B|
| + ..+...o.* *|
| . + o +.o.o . |
| o . S + . o |
| . o + o o |
| . . o o |
| . . . |
| . |
+----[SHA256]-----+
上記で作成したid_rsa.pub
の内容をGitBucketに登録します。
これでpushする準備が整いました。
GitのRemoteのURLはSSHの方に変更しておきます。
これでXcodeからpushをすると、接続先を信頼するかと聞かれるのでTrust
を選択し、
パスフレーズ無しで鍵を生成したので、そのままOK
とすると、pushが成功します。
感想
HTTPでpush出来なくて嘘だろ?!と思って色々調べましたが、あまり有用な情報が無く苦労しました。
他のIDE(Eclipse, IntelliJ IDEA) で同様の環境で苦労したことが無かったのでXcode恐るべしって感じです…
(実はもっと簡単にイケるよ!って情報があればコメントお願いします!!!!)