トンネルのみのアクセスを許可するようにssh(Linux上)を構成することは可能ですか?つまり、ユーザーはトンネルをセットアップできますが、シェル/アクセスファイルを取得できませんか?
はい、/bin/false
をシェルとして使用し、リモートコマンドを実行せずにトンネリングSSHプロセスを開始するようユーザーに指示します(つまり、-N
OpenSSHのフラグ):
ssh -N -L 1234:target-Host:5678 ssh-Host
ユーザーの.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」などのポート転送を指定した場合でも、ポート転送は有効です。
とにかく試してみてください。
/bin/press_to_exit.sh
などのログアウトのみを許可するシェルをユーザーに提供します
#!/ bin/bash read -n 1 -p "終了するには任意のキーを押してください"キー
これにより、トンネルをアクティブにしたまま、必要なだけログインしたままにすることができますが、コマンドを実行することはできません。 Ctrl-c
は接続を閉じます。
ユーザーがログインできないシェルを割り当てます。
例えば.
#!/bin/sh
echo "No interactive login available."
sleep 60
exit 0
シェルプロンプトが表示されないようにし、60秒のタイムアウトを与えます。60秒間アクティブな接続がない場合、接続は終了し、完全に切断されます(要件に応じて数を増やします)。
シェルでは許可されないため、リモートコマンドを実行することもできません。
私の解決策は、対話型シェルなしでトンネルのみを使用できるユーザーにを提供し、そのシェルをに設定することです/ etc/passwdから/ usr/bin/tunnel_Shell。
実行可能ファイル/ usr/bin/tunnel_Shellを無限ループ。
さらに、AllowGroups
およびMatch Group
オプション。
ここで完全に説明されています:http://blog.flowl.info/2011/ssh-tunnel-group-only-and-no-シェルしてください/