みかづきメモ

学習したことのメモとか、日記とか、備忘録。

rugged を使うときハマったこと

rugged を使って、 Git を使ったアプリケーションを作っている時にハマったことをメモしてます。


Rugged::SshError: username does not match previous request

下のような感じで、リポジトリを clone しようとすると怒られます。

credential = Rugged::Credentials::SshKey.new(publickey: 'id_rsa.pub', privatekey: 'id_rsa', username: 'fuyuno', passphrase: 'cat')
Rugged::Repository.clone_at('git@github.com:fuyuno/Test.git', Dir.mktmpdir, credentials: credential)
# => Rugged::SshError: username does not match previous request
#    from (pry):19:in `clone_at'

SSH キーもユーザーも合ってるじゃん!って思ってたのですが、 Rugged::Credentials::SshKeyusername は、
SSH キー所有者のユーザー名じゃくて、ホスト側?っぽい。
ということで、下のように修正すれば OK

credential = Rugged::Credentials::SshKey.new(publickey: 'id_rsa.pub', privatekey: 'id_rsa', username: 'git', passphrase: 'cat')
Rugged::Repository.clone_at('git@github.com:fuyuno/Test.git', Dir.mktmpdir, credentials: credential)

Rugged::SshError: Failed to authenticate SSH session: Waiting for USERAUTH response

これは、単純に使った SSH キーの問題でした。

そもそも SSH に対応していない

Rugged.features とすることで、対応しているものが表示できるのですが、

Rugged.features
# => [:threads, :https]

となって、 SSH 対応してないよーってことになりました。
そのときは、 libssh2-devel を入れたら SSH も対応しました。

軽く使ってみて、ハマったのはこの辺。
ではでは。