Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
8
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

sshを使用し、別サーバーからの特定のコマンドの実行だけを許可する

sshを使用し、別サーバーからの特定のコマンドの実行だけを許可する

sshを使用すると別サーバよりコマンドを実行する事が可能になるが、特にrootを用いてのコマンド実行など認証を鍵形式にしていても不安が残る。そこで特定のコマンドやシェルの実行しか許さないようにする。
自分で作成したシェルも実行できます。
sudoして特定のコマンドしか許さないようにしたらどうかといった話もあるが、ここはsudoできないような環境を想定する。
またrootユーザ以外でも同じテクニックは使えるので覚えておこう。

コマンドを実行されるサーバー(受け側)のsshd設定変更

rootでのログインを禁止にしていると「PermitRootLogin no」になっていたり
初期だと「PermitRootLogin yes」になっていたりすると思う。
これを「PermitRootLogin forced-commands-only」に変更する。
※最近のデフォルトだと「PermitRootLogin forced-commands-only」に既になっていたりする。

/etc/ssh/sshd_config
#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

この秘密鍵は他のユーザには見れないように厳重にパーミッションなど注意してください。

以上

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
8
Help us understand the problem. What are the problem?