web-dev-qa-db-ja.com

カスタムOpenSSHシェル

環境はUbuntuServer12.04です。

ログファイルでtail-fを実行し、プログラムが終了するとセッションを閉じる(ctrl + c)シェルにのみsshで接続できるユーザーをサーバー上に作成したいと思います。

これを達成する方法はありますか?

8
Ablue

衒学的であるために、それはctrl + cではなく、アプリを強制終了するSIGHUP(ctrl + dに近い)です。

基本的に、ユーザーのシェルの/etc/passwdに必要なものを配置できます。ユーザーのpasswd行のデフォルト(おそらく/bin/bash)を別のプログラムに置き換えるだけです。そのプログラムは、/usr/bin/tail_log_fileなどのスクリプトであり、これらのコンテンツはroot:rootが所有し、umode0755は次のようになります。

#!/bin/rbash
tail -f /path/to/logfile

Rbash以外のインタプリタを使用することもできますが、そのような場合は制限付きシェルを使用することをお勧めします。

それについて非常に衒学的にするには、スクリプトのパスを/etc/shellsに追加する必要がありますが、通常はとにかく機能することがわかります。

また、ユーザーがスクリプトをバックグラウンドに配置したり、いくつかのオプション(ssh username@Host bash)を使用しても、シェルを取得したりする可能性があることにも注意してください。このような方法でユーザーを制限したい場合は、適切なファイルシステムのアクセス許可が唯一の実際の解決策です。

8
Falcon Momot

キーペアベースの認証を使用することに満足している場合は、ssh強制コマンドが頭に浮かびます。

man authorized_keys
/command=
10
tink

公開鍵認証を使用してログインするときに、選択したコマンドを実行するようにsshを構成できます。これを行うには、キーのペアを生成します。

djs@sardinia:~$ ssh-keygen -f restricted-key 
Generating public/private rsa key pair. 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in restricted-key. 
Your public key has been saved in restricted-key.pub. 
The key fingerprint is: b1:8f:26:47:c2:c5:f2:8d:ed:a0:c4:bd:9a:30:9d:08 djs@sardinia 
[...]

restricted-key.pubには、ユーザーの~/.ssh/authorized_keysファイルを挿入するのに適した行が含まれています。

ssh-rsa AAAA...UDz47Nl djs@sardinia

ただし、これにコマンドを追加すると、次のキーを使用してログインすると、sshがそのコマンドを実行します。

command="tail -f /my/interesting/file" ssh-rsa AAAA...UDz47Nl djs@sardinia

次に、ユーザーはssh -i restricted-keyを使用してマシンにSSH接続できます。

2
Dan