rugged を使って、 Git を使ったアプリケーションを作っている時にハマったことをメモしてます。
Rugged::SshError: username does not match previous request
下のような感じで、リポジトリを clone しようとすると怒られます。
credential = Rugged::Credentials::SshKey.new(publickey: 'id_rsa.pub', privatekey: 'id_rsa', username: 'mika-f', passphrase: 'cat') Rugged::Repository.clone_at('git@github.com:mika-f/Test.git', Dir.mktmpdir, credentials: credential) # => Rugged::SshError: username does not match previous request # from (pry):19:in `clone_at'
SSH キーもユーザーも合ってるじゃん!って思ってたのですが、 Rugged::Credentials::SshKey
の username
は、
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:mika-f/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 も対応しました。
軽く使ってみて、ハマったのはこの辺。
ではでは。