web-dev-qa-db-ja.com

コマンドプロンプトを表示せずにTCPポート転送を許可するUnixシェル/ SSH構成

私はDebianLinuxを実行しています。コマンドプロンプトなしで、TCP転送用にSSH経由で接続できるユーザーアカウントが必要ですのみ

たとえば、次のように機能します(リモートコンピューターから):

ssh -D1234 user@myhost

ただし、コマンドプロンプトは表示されません。

/ bin/falseや/ sbin/nologinのようなシェルを使用すると、ユーザーがログインすることさえできないため、制限が厳しすぎます。「exit」またはCtrl + Dコマンドのみを許可するシェルがその役割を果たします。

SFTPのみを許可するために同様のことが可能であることは知っていますが、TCP転送に相当するものが見つかりません。

ありがとう

2
Raphael K

-Nオプションを探しているようです。

-N      Do not execute a remote command.  This is useful 
        for just forwarding ports (protocol version 2 only).

そのようです:

ssh -D 8080 -N [email protected]

また、-fオプションも興味深いかもしれません。

 -f      Requests ssh to go to background just before command execution.  
         This is useful if ssh is going to ask for passwords or passphrases, 
         but the user wants it in the background.  This implies -n. 
         The recommended way to start X11 programs at a remote site is 
         with something like ssh -f Host xterm.

インバウンド接続で可能なことを制限する場合:

  • authorized_keysファイルにカスタムコマンドを設定します(sshキーを使用していると仮定します)
  • ユーザーのシェルを変更する

使用するコマンド/シェルは、許可する内容によって異なります。例えば:

  • /bin/catは接続を開いたままにしますが、まったく何もしません
  • rsshを使用すると、使用可能なアクションをカスタマイズできます
  • Chrootの投獄されたシェルは同様のカスタマイズ性を提供します
  • bashは制限付きモード(rbash)で実行できます。これにより、構成済みのPATHでのみコマンドを実行できます。絶対確実というわけではありませんが、何の価値もありません。
5
tylerl

これでうまくいくかどうかはわかりません。私は人々にフロントエンドで作業してもらいたいが、計算ノードでは許可されていないクラスターを持っています。すべての人がすべてのコンピューターにアカウントを持っていますが、ノードの/etc/profileには次の行があります。

if test "$TERM" != "linux" && test "$USER" != "root" ;then
  echo ""
  echo -e "\\033[0;34m=======================================================================\\033[0;39m"
  echo ""
  echo -e "\\033[0;31m         Login to this Host is allowed for administrator only.\\033[0;39m"
  echo -e "            Please use \\033[0;34mqueue\\033[0;39m to submit your jobs instead"
  echo -e "    or \\033[0;34m132.187.71.6\\033[0;39m or  \\033[0;34m132.187.71.7\\033[0;39m to login into cluster front-end."
  echo ""
  echo -e "\\033[0;34m=======================================================================\\033[0;39m"
  echo ""
exit
fi

$TERMのある部分は、ログインが直接(つまりssh)であるか、キューイングシステムを介して行われたかを確認します。最後のものは許可されます。特定のユーザーにログインを許可する場合は、ifステートメントに&& test "$USER" != "someuser"を追加できます。

0
tatus2