sshを使用し、別サーバーからの特定のコマンドの実行だけを許可する
sshを使用すると別サーバよりコマンドを実行する事が可能になるが、特にrootを用いてのコマンド実行など認証を鍵形式にしていても不安が残る。そこで特定のコマンドやシェルの実行しか許さないようにする。
自分で作成したシェルも実行できます。
sudoして特定のコマンドしか許さないようにしたらどうかといった話もあるが、ここはsudoできないような環境を想定する。
またrootユーザ以外でも同じテクニックは使えるので覚えておこう。
コマンドを実行されるサーバー(受け側)のsshd設定変更
rootでのログインを禁止にしていると「PermitRootLogin no」になっていたり
初期だと「PermitRootLogin yes」になっていたりすると思う。
これを「PermitRootLogin forced-commands-only」に変更する。
※最近のデフォルトだと「PermitRootLogin forced-commands-only」に既になっていたりする。
# PermitRootLogin no
PermitRootLogin forced-commands-only
service sshd reload
キーの発行
コマンドを実行されるサーバー(受け側)にてキーを発行する
ssh-keygen -t rsa -N "" -b 2048 -f /root/.ssh/hogehoge
-t rsa :keyのタイプ
-N "" :パスワードなし
-b :bit数
-f :ファイルの作成場所
作成されたキーは
hogehoge
hogehoge.pub
となる。
このうちhogehoge.pubの中身を
/root/.ssh/authorized_keysに追加する。
既に行がある場合は最下行に追加してください。
追加する際は、行の先頭に
no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="コマンドの絶対パス"
を追加します。
ここでは他にポートフォワードなども禁止しています。
hogehoge.pubの中身が
ssh-rsa aaaaaaaaaaaaaaaaa1111111111111111
だとしたら、
no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="コマンドの絶対パス" ssh-rsa aaaaaaaaaaaaaaaaa1111111111111111
となる。
すでにauthorized_keysに何かある場合は
ssh-rsa bbbbbbbbbbbbbbbbbbbbb2222222222222222222
no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="コマンドの絶対パス" ssh-rsa aaaaaaaaaaaaaaaaa1111111111111111
のように既存行を改行して次の行に追記する。
追記後は「hogehoge.pub」ファイルは消しておいていいかも。
コマンド発行側
コマンド発行側では先程作成した秘密鍵「hogehoge」を使用して接続する。
ssh -i /etc/ssh/hogehoge -p 22222 -l root ターゲットのipもしくは名前 ターゲットの実行したいコマンドをターゲット側のフルパスで
-i : pubキーのパス
-p : port
この秘密鍵は他のユーザには見れないように厳重にパーミッションなど注意してください。
以上