$shibayu36->blog;

株式会社はてなでエンジニアをしています。プログラミングや読書のことなどについて書いています。

Net::OpenSSHを使ってremoteのserverでsudoしたい

deployツールを作ろうとしていると、remoteのserverでsudoしたくなるんですが、Net::OpenSSHを使ってsudoするとパスワードの入力を求められて固まるということが起こります。今回はsudoに標準入力からパスワードを渡すオプションがあったので、それで解決しました。

my $ssh = Net::OpenSSH->new(
    'hostname', user => 'username',
);
my @cmd = ('ls', '/');
$ssh->capture2(
    { stdin_data => "password\n" },
    join(' ', 'sudo', '-Sk', @cmd),
);