scala-sshを使ってリモートサーバにアクセスして、sudoコマンドを使おうと思ったら詰まったのでメモ。
sudo使ってlsコマンドを叩きたかったわけではないけど、手軽だったため今回はlsでサンプルを用意した。
val command = "ls -l"
SSH("<リモートサーバーのホスト名>") { client =>
val li = client.exec(command).right.map { res => res.stdOutAsString()
println(li)
}
---
Right(total 0
-rw-rw-r-- 1 fuppi fuppi 0 Jun 27 17:13 1.txt
-rw-rw-r-- 1 fuppi fuppi 0 Jun 27 17:14 2.txt
-rw-rw-r-- 1 fuppi fuppi 0 Jun 27 17:14 3.txt
-rw-rw-r-- 1 fuppi fuppi 0 Jun 27 17:14 4.txt
)
sudoで実行しようとしても
val command = "sudo ls -l"
SSH("<リモートサーバーのホスト名>") { client =>
val li = client.exec(command).right.map { res => res.stdOutAsString()
println(li)
}
---
Right()
何も帰ってこなくなる。エラーとか警告すらでない。
val command = "sudo ls -l"
SSH("<リモートサーバーのホスト名>") { client =>
val li = client.execPTY(command).right.map { res => res.stdOutAsString()
println(li)
}
---
Right(total 0
-rw-rw-r-- 1 fuppi fuppi 0 Jun 27 17:13 1.txt
-rw-rw-r-- 1 fuppi fuppi 0 Jun 27 17:14 2.txt
-rw-rw-r-- 1 fuppi fuppi 0 Jun 27 17:14 3.txt
-rw-rw-r-- 1 fuppi fuppi 0 Jun 27 17:14 4.txt
)
exec -> execPTYに変えたら実行できた。
エラーも警告もないというのが辛かった・・・