itamae | 鍵をed25519に変更したらitamaeが失敗した

#  事象

SSHの認証鍵の形式をrsa2からセキュリティが高いed25519形式に変更してitamaeを実行しようとしたらエラーが発生してしまった

```shell-session
# itamaを実行してみた
itamae ssh -u hiro -h 192.168.56.xxx -i /home/xxx/.ssh/id_ed25519_xxx sample.rb --dry-run

#=> INFO : Starting Itamae...
#=>/usr/local/rvm/gems/ruby-2.3.0@itamae/gems/net-ssh-3.2.0/lib/net/ssh.rb:249:in `start': Authentication failed for user xxx@192.168.56.xxx (Net::SSH::AuthenticationFailed)

```

# トラブルシューティング

#### ・鍵や相手側のsshdの問題を疑い、sshログインしてみる

 ```shell-session
 # sshコマンドでログインしてみる
 ssh -i /home/xxx/.ssh/id_ed25519_xxx xxx@192.168.56.xxx

 #=> ログインOK
 ```

   相手側のsshdや鍵の問題ではない

#### ・前回の実行から変更したのは、キーペアだけの筈なので、前回のrsa2の鍵を戻して、実行してみる

 ```shell-session
 # まず、sshコマンドでログイン
 ssh -i /home/xxx/.ssh/id_rsa_xxx xxx@192.168.56.xxx

 #=> ログインOK

 # itamae実行
 itamae ssh -u hiro -h 192.168.56.xxx -i /home/xxx/.ssh/id_rsa_xxx sample.rb --dry-run

 #=> 実行OK
 ```


#### ・itamae(ruby)がed25519形式に対応していないと判明したので、エラーをググってみる

  ruby net-ssh ed25519 でググると、やはりnet-ssh-3.2.0ではed25519は未対応、4.0系で対応予定だそう

#### ・とりあえず、対応版がリリースしていないか、gem updateしてみる

 ```shell-session
 # gemのアップデート
 gem update

 # itamaを実行してみた
 itamae ssh -u hiro -h 192.168.56.xxx -i /home/xxx/.ssh/id_ed25519_xxx sample.rb --dry-run

 #=> やはりダメ
 ```

#### ・個別にnet-sshをあげる

 **※以下はあくまでも自己責任でお願いします**

```shell-session
# 最新版のnet-sshを調べる
gem search net-ssh

#=> *** REMOTE GEMS ***
#=> net-ssh (3.2.0)
```
 リリース版では 3.2.0 より新しいリリースはないようなので、4系のrcやbeta版を調べる

```shell-session
gem search net-ssh -v 4.0.0.rc

#=> *** REMOTE GEMS ***
#=> net-ssh (4.0.0.beta3, 4.0.0.beta2, 4.0.0.beta1, 4.0.0.alpha4, 4.0.0.alpha3, 4.0.0.alpha2, 4.0.0.alpha1, 3.3.0.beta1, 3.2.1.beta1, 3.2.0.rc2, 3.2.0.rc1, 3.1.0.rc2, 3.1.0.rc1, 3.1.0.beta3, 3.1.0.beta2, 3.0.2.rc1, 3.0.1.rc1, 3.0.0.rc1, 2.10.1.rc2, 2.10.1.rc1, 2.10.0.beta2, 2.10.0.beta1, 2.9.4.rc1, 2.9.3.beta1, 2.9.2.rc3, 2.9.2.rc2, 2.9.2.rc1, 2.9.2.beta)
```

beta版の最新版 4.0.0.beta3をインストールして、3.2.0と入れ替える

```shell-session
# インストール
gem install net-ssh -v 4.0.0.beta3

# 3.2.0のアンインストール
gem uninstall net-ssh -v 3.2.0

```

itamaeを実行してみる

```shell-session
# itamae実行
itamae ssh -u hiro -h 192.168.56.xxx -i /home/xxx/.ssh/id_ed25519_xxx sample.rb --dry-run

#=> INFO : Starting Itamae...
#=>/usr/local/rvm/gems/ruby-2.3.0@itamae/gems/net-ssh-4.0.0.beta3/lib/net/ssh/authentication/ed25519_loader.rb:17:in `raiseUnlessLoaded': unsupported key type `ssh-ed25519' -- see Could not find 'rbnacl-libsodium' (>= 1.0.10) among 35 total gem(s) (NotImplementedError)
```
エラーメッセージが変わった

#### ・依存パッケージがあるようなのであげる

```shell-session
# rbnacl-libsodium をインストール
gem install rbnacl-libsodium

# itamae実行
itamae ssh -u hiro -h 192.168.56.xxx -i /home/xxx/.ssh/id_ed25519_xxx sample.rb --dry-run

#=> INFO : Starting Itamae...
#=>/usr/local/rvm/gems/ruby-2.3.0@itamae/gems/net-ssh-4.0.0.beta3/lib/net/ssh/authentication/ed25519_loader.rb:17:in `raiseUnlessLoaded': unsupported key type `ssh-ed25519' -- see Could not find 'bcrypt_pbkdf' (~> 1.0.0.alpha1) among 38 total gem(s) (NotImplementedError)

# bcrypt_pbkdf (~> 1.0.0.alpha1) をインストール
gem install bcrypt_pbkdf -v 1.0.0.alpha1
 
```

#### ・できた! 

```shell-session
# itamae実行
itamae ssh -u hiro -h 192.168.56.xxx -i /home/xxx/.ssh/id_ed25519_xxx sample.rb --dry-run

#=> 実行OK
```