1. ホーム
  2. unix

[解決済み] SSHトンネルのセットアップを許可するが、それ以外のことは許可しない

2023-01-22 16:22:09

質問

あるユーザーが特定のポート (たとえば 5000) で特定のマシンに SSH トンネルを設定できるようにしたいのですが、このユーザーをできる限り制限したいと思います。(認証は公開/秘密鍵ペアで行われます)。

関連する ~/.ssh/authorized_keys ファイルを編集する必要があることは分かっていますが、(公開鍵以外の)そこに置くべきコンテンツが正確に分かりません。

どのように解決するのですか?

Ubuntu 11.10 では、ポート転送を許可する一方で、-T の有無にかかわらず ssh コマンドをブロックし、scp コピーをブロックできることがわかりました。

具体的には、私は localhost:6379 にバインドされた redis サーバーを持っており、鍵ファイルを持っていて ssh でログインする他のホストと ssh トンネルを介して安全に共有したいと思っています。

$ ssh -i keyfile.rsa -T -N -L 16379:localhost:6379 someuser@somehost

これにより、redis-server、"somehost"のポート6379は、sshコマンドを実行するホスト上のローカルに、"localhost"のポート16379にリマップされて表示されることになります。

リモートの "somehost" で authorized_keys に使用したものは次のとおりです。

cat .ssh/authorized_keys   (portions redacted)

no-pty,no-X11-forwarding,permitopen="localhost:6379",command="/bin/echo do-not-send-commands" ssh-rsa rsa-public-key-code-goes-here keyuser@keyhost

no-ptyはターミナルを開きたいほとんどのsshの試行をトリップさせます。

permitopenは転送が許可されるポートを説明します。この場合、ポート6379は私が転送したかったredis-serverのポートです。

command="/bin/echo do-not-send-commands" は、誰かまたは何かが ssh -T またはその他の方法でホストにコマンドを送信することに成功した場合に、"do-not-send-commands" をエコーバックしています。

最近の Ubuntu から man sshd で、authorized_keys / コマンドは以下のように記述されています。

command="command" この鍵が認証に使用されるたびにコマンドが実行されることを指定します。 実行されるコマンドを指定します。 ユーザが指定したコマンドは(もしあれば)無視されます。 無視されます。

scp secure file copying を使用しようとすると、 "do-not-send-commands" のエコーが発生して失敗します; sftp もこの設定では失敗することが分かっています。

以前の回答で示された制限付きシェルの提案も良いアイデアだと思います。 また、ここで詳述されているすべてのことは、"man sshd" を読み、そこで "authorized_keys" を検索することで決定することができることに同意するものとします。