私はOpenVMSからRedHatLinux6へのアプリケーションの移行に取り組んでいます。アプリケーションはグリーンスクリーンターミナルアプリケーションです。ユーザーはSSH経由でLinuxにログインし、アプリケーションは自動的に起動しますが、シェルにアクセスすることはできません。アプリケーションが閉じるかクラッシュすると、自動的にログアウトする必要があります。これにアプローチする最良の方法は何ですか?
次のコマンドで新しいユーザーを作成してみました。
useradd -s /sbin/nologin test
次に、ftp&をユーザーの.bash_profileに追加して、ftpコンソールがすぐに開き、ユーザーが終了するとログアウトすることを期待しました。ただし、SSHでの認証時に、セッションは強制終了されます。何か案は?
私が過去12年間サポートしてきた「グリーンスクリーン」アプリケーションは、変更された.bash_profile
とアプリケーションを起動するラッパースクリプトを介してこれを実現します。
システムが構築され、サービスユーザーが作成されたら、.bash_profile
ディレクトリのデフォルトの/etc/skel
を変更します。これにより、システムで作成された新しいユーザーがログイン設定を確実に取得できます。
アプリケーションを呼び出しましょう "Peach"
.bash_profile内で、
# Source any Peach-specific variables
. /etc/default/Peach
# Set up the search paths:
PATH=$PATH:.
# Set up the Shell environment:
set +u
trap "echo 'logout'" 0
# Run the Peach application or start script:
/opt/Peach/bin/run-Peach
実際の「run-Peach」ラッパースクリプトは次のようになります。
#!/bin/bash
set -e
<blah blah> # do stuff, set MOAR variables
/opt/Peach/bin/Peach # run application binary
このユーザーグループにはMatch
ブロックを使用し、ForceCommand
を使用して、独自のexit
を使用してユーザーをログアウトするラッパースクリプトを使用してOpenVMSプログラムを強制的に実行します。
ForceCommand Forces the execution of the command specified by ForceCommand, ignoring any command supplied by the client and ~/.ssh/rc if present. The command is invoked by using the user's login Shell with the -c option. This applies to Shell, command, or subsystem execution. It is most useful inside a Match block. The command originally supplied by the client is available in the SSH_ORIGINAL_COMMAND environment variable. Specifying a command of “internal-sftp” will force the use of an in-process sftp server that requires no support files when used with ChrootDirectory.
これはログインシェルではないため、ログアウトする必要はありません。終了するだけです。
Match Group oldies
ForceCommand /usr/local/bin/wrapper
ラッパースクリプトの例は次のようになります。
# cat /usr/local/bin/wrapper
#!/usr/bin/env bash
dialog --title "Message" --yesno "Wrapper around your OpenVMS program" 6 25
exit 0
これはssh
アクセスに有効です。
/etc/passwd
から同じラッパースクリプトの実行を強制することもできます。
bob:x:1100:1100:Sponge Bob:/home/bob:/usr/local/bin/wrapper
ログインコンソールから同じ機能を使用できます。
アプリケーションをユーザーのシェルとして設定してみませんか?つまり、ログイン時に実行されるのはそれだけであり、(アプリケーション自体の内部での何らかのアクセスを除いて)実際には他に何もできません。