sshトンネリングのみのアクセス


31

トンネリングのみにアクセスを許可するように(Linuxで)sshを構成することは可能ですか?すなわち、ユーザーはトンネルをセットアップできますが、シェル/アクセスファイルを取得できませんか?

回答:


42

はい、/bin/falseシェルとして使用し、リモートコマンド(つまり-NOpenSSH のフラグ)を実行せずにトンネリングSSHプロセスを開始するようにユーザーに指示します。

ssh -N -L 1234:target-host:5678 ssh-host

ユーザーがを使用しない場合-N、シェルアクセスがあります。これは本当に問題を解決せず、危険です。
-mlissner

12
@mlissner:いいえ。/bin/falseシェルとして使用している場合、すべてのログインセッションがすぐに終了するため、シェルにアクセスできません。
スヴェン

10

ユーザーの.ssh / authorized_keysファイルに、次のようなものを入れます。

permitopen="192.168.1.10:3306",permitopen="10.0.0.16:80",no-pty ssh-rsa AAAAB3N...

したがって、基本的に、コントロールはスペースで区切られたユーザーのssh公開キーの前にあります。この例では、特定の公開鍵を使用した接続は、192.168.1.10のMySQLサーバーと10.0.0.16のWebサーバーへのSSHポート転送のみを許可され、シェル(no-pty)は割り当てられません。「no-pty」オプションについて具体的に質問していますが、他のオプションは、ユーザーが特定のサーバーにのみトンネルすることになっている場合にも役立ちます。

authorized_keysファイルのその他のオプションについては、sshdのマニュアルページを参照してください。

ユーザーのエクスペリエンスは少し奇妙に見えるかもしれないことに注意してください:彼らがsshすると、セッションがハングしているように見えます(ptyを取得していないため)。それで大丈夫です。ユーザーが「-L3306:192.168.1.10:3306」などのポート転送を指定している場合、ポート転送は引き続き有効です。

いずれにせよ、試してみてください。


6
これは危険なアドバイスです。no-ptyシェルへのアクセスを妨げません。シェルにptyを与えるだけではありません。プロンプトは表示されません(つまり、「ハングしたように見える」)が、それでもコマンドを正常に実行できます。そこからのシェルアクセスを制限command="..."する.ssh/authorized_keys場合は、オプションが必要です。
アレクシトルハモ

@AleksiTorhamoは正しいですが、これは始まりです。また、シェルを/ etc / passwdで/ usr / sbin / nologinまたは/ bin / falseに設定して、シェルを完全に制限する必要があります。上記のエントリを編集して、Aleksiのアドバイスとともにそれを反映させました。
ジェイミーソンベッカー

4

次のようなログアウトのみを許可するシェルをユーザーに提供します。 /bin/press_to_exit.sh

#!/ bin / bash
read -n 1 -p「終了するには任意のキーを押してください」キー

この方法で、彼はトンネルをアクティブにして、コマンドを実行せずに、必要な限りログインしたままにすることができます。Ctrl-c接続を閉じます。


3
少なくとも理論的には、ユーザーは適切なタイミング(行1と2)でCTRL + Cを押すと、完全なbashシェルになると思います。
andreas-h

2

ユーザーのログインを許可しないシェルを割り当てます。

例えば

#!/bin/sh
echo "No interactive login available."
sleep 60
exit 0

それらがシェルプロンプトを取得するのを防ぎ、60秒のタイムアウトを与えます-60秒間アクティブな接続がない場合は終了し、それによってそれらを完全に切断します(要件に応じて数を増やします)。

シェルはそれらを許可しないため、リモートコマンドも実行できません。


4
ほとんどのLinuxインストールにはすでにそのための何かが付属しています。/ sbin / nologin、または/ bin / falseなど。
ロリー

1
上記の例でCtrl-Cは何をしますか?
アルジャン

Arjan:スクリプトはシェルとして使用されるため、Ctrl-Cはlogout通常の「」と同じ効果があります。
荒さ2009

2
私は実際に「-N」オプションを使用したearlの応答が好きですが、ユーザーに役立つ、友好的で有益なメッセージを提供したい場合-そして、SSH接続をいたるところに残して停止したい場合-カスタムスクリプトは素敵で明確ですそれが何をしているか。
JRG

2
@jrgこの議論は古く、あなたは気が変わったかもしれません:)しかし、私見では、手作りのシェルスクリプトを出すのは危険です。が既にあり /sbin/nologin、でユーザーフレンドリーなメッセージでカスタマイズできます/etc/nologin.txt
dr01

0

私の解決策は、対話型シェルを使用せずにトンネリングのみを行うユーザーに、/ etc / passwdのシェルを/ usr / bin / tunnel_shellに設定することです。

無限ループで実行可能ファイル/ usr / bin / tunnel_shellを作成するだけです。

さらにAllowGroupsand Match Groupオプションを使用します。

ここで完全に説明しています: http : //blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/


2
ユーザーは、なんらかの方法で実行可能ファイルを終了し、シェルをエスケープできる場合があります。実行可能ファイルでこれを実行できないと完全に確信していますか?
dr01

2
@ dr01正直に言うと、これが100%安全かどうかはわかりません。実行可能ファイルを終了すると、SSHセッションも終了します。これについてさらに調査し、ここで再度コメントする場合があります。
ダニエルW.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.