2016-05-27 11 views
0


誰かがSSHをサーバーに試してみるたびに(例えばUbuntu 14.04)ルビースクリプトを呼び出そうとしています。
たとえば、誰かがssh root @ serveripでログインしようとしていて、私のrubyスクリプトが呼び出されなければならず、スクリプトがtrueを返す場合にのみログインプロセスを続行し、falseを返す場合は接続を終了する必要があります。誰かがSSHを使ってログインするたびにプロセスを呼び出す

どうすればこの問題を解決できますか?

ありがとうございました。

+0

次のリンクを確認してください:http://askubuntu.com/questions/397674/run-scripts-automatically-in-server-after-ssh-connection – SilentMonk

答えて

1

サーバーのsshd_configファイルにForceCommandパラメータを使用してみることができます。それはかなり簡単、よく:)オンラインあなたは、configファイルの一番下に入る

文書化されます:あなたは、特定の条件をチェックし、接続を終了することができた場合

ForceCommand /path/to/script 

のでわからないが、しかし、これはあなたに導くかもしれません。あなたの要件を満たすために

1

、あなたはまた、あなたがForceCommandオプションを使用する場合、$SSH_ORIGINAL_COMMAND環境変数で動作します:

ForceCommand /path/to/script && $SSH_ORIGINAL_COMMAND 

をこれはあなたのスクリプトを実行し、/path/to/scriptの終了ステータスに基づいて、それが実行されますユーザーコマンドまたはセッションを終了します。

+0

これはすごいですが、ちょっとした質問ですが、どうやってセッションを終了できますか?スクリプトから?ある種の例外を投げるのと同じように?申し訳ありませんが、私は非常にこれに新しいです。 –

+0

スクリプトがゼロ以外の終了コードを返した場合、元のコマンドは実行されず、コマンドは終了し、セッションは終了します。 – Jakuje

+0

http://stackoverflow.com/questions/37488014/usr-bin-env-ruby-no-such-file-or-directory-at-ssh-login @Jakuje –

0

答えで友人に言われているように、終了コードベースの実行は私のためには機能しませんでした。ここで

が回避策です: - 一部の人々で述べたように

、私は、彼らが特定の条件を満たした場合、私はbashのを開いたスクリプト内でその後/etc/ssh/sshd_config

ForceCommand /path/to/script

でこれを使用していました。たとえば、bashの場合

#!/bin/bash 
if [ condition ] 
then 
bash #This will open bash if condition is satisfied. 
//login 
fi 

ありがとうございました!

+0

これは基本的にコマンドラインに置かれたすべてのユーザコマンドを壊します(例えば 'scp')。' $ SSH_ORIGINAL_COMMAND'変数もチェックして、はい、これは部分的な回避策です。 – Jakuje

関連する問題