sshで鍵認証できるようにして、sudo権限もつけてもらえば大抵のことはできるだろうと思ったときに、もう少し配慮が必要だったというLinux管理の話。
初めてのsshでknown_hostsにホスト鍵を自動登録
台数が増えてくると、初期設定をいちいちするのが手間になるので、鍵認証できる接続アカウントだけ準備できれば、後は設定変更したくない。やり方はいろいろありそうだけど、結局SSHホスト鍵のknown_hostsへの保存だけ自動(サイレント)にしたいので、スクリプト直書きで対処した。~/.ssh/configに書いた方が良かったかなとも考えたけど、いちいち書いてあった方が運用担当に意識されるので良いかと思い。
ssh -o StrictHostKeyChecking=no bastion "uname -n"
ssh経由でsudoできない
NOPASSWD: ALLで設定してあるアカウントでssh経由でコマンドを発行してもsudoさせてもらえなかった。
ssh bastion "sudo uname -n" sudo: sudo を実行するには tty がなければいけません。すみません
接続先のsudoers設定のrequirettyを書き換える方法もあるみたいだけど、今回はいちいち初期設定が要らないことが目標なので、sshクライアント側で対処。
ssh -t bastion "sudo uname -n"
cronからsshでsudoする
これで十分だろうと安心していたら、sshでsudoするスクリプトをcron経由で実行したら失敗した。いよいよ接続先の設定を変更することを覚悟しながら、sshのmanをよく読んでみると。
-t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g., when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.
-tの複数指定でforce ttyできると書いてあるので、こんな感じで書いたコマンドをcronから実行したら上手く行ったのでした。
ssh -tt bastion "sudo uname -n"
無事にクライアント側だけの変更だけで済ませることができた。セキュリティ面を考えるともう少し色々なことを考えなければいけないと思うけど。