101

ユーザーが特定のポート(たとえば5000)の特定のマシンへのSSHトンネルを設定できるようにしたいのですが、このユーザーを可能な限り制限したいと思います。(認証はパブリック/プライベートキーペアで行われます)。

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

4

10 に答える 10

94

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

具体的には、localhost:6379 にバインドされた「somehost」に redis-server があり、ssh トンネルを介して、キーファイルを持ち、ssh で接続する他のホストに安全に共有したいと考えています。

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

これにより、redis-server、「somehost」の「localhost」ポート 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="command" このキーが認証に使用されるたびにコマンドが実行されることを指定します。ユーザーが指定したコマンド (存在する場合) は無視されます。

scp の安全なファイル コピーを使用しようとすると、「do-not-send-commands」のエコーで失敗し、sftp もこの構成で失敗することがわかりました。

以前の回答で行われた制限付きシェルの提案も良い考えだと思います。また、ここで詳述されているすべてのことは、「man sshd」を読んで「authorized_keys」を検索することで判断できることに同意します。

于 2012-04-22T08:28:24.873 に答える
19

ユーザーのシェルを制限付きシェルに設定することをお勧めします。ユーザーの〜/ .bashrcまたは〜/ .bash_profileでPATH変数の設定を解除すると、ユーザーはコマンドを実行できなくなります。less後で、またはなどの限られたコマンドセットの実行をユーザーに許可する場合はtail、許可されたコマンドを別のディレクトリ(など/home/restricted-commands)にコピーし、PATHを更新してポイントすることができます。そのディレクトリ。

于 2008-08-12T00:16:38.020 に答える
17

no-X11-forwardingのようなauthorized_keysオプションの他に、実際にあなたが求めているのはまさにpermitopen="host:port"です。このオプションを使用すると、ユーザーは指定されたホストとポートへのトンネルのみを設定できます。

AUTHORIZED_KEYS ファイル形式の詳細については、man sshd を参照してください。

于 2010-11-17T08:52:05.223 に答える
9

私の解決策は、対話型シェルなしでトンネリングのみを行っているユーザーに、 /etc/passwdのシェルを/usr/bin/tunnel_shellに設定することです。

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

#!/bin/bash
trap '' 2 20 24
clear
echo -e "\r\n\033[32mSSH tunnel started, shell disabled by the system administrator\r\n"
while [ true ] ; do
sleep 1000
done
exit 0

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

于 2013-04-13T16:44:45.847 に答える
3

ログインするための公開鍵を使用して、authorized_keys ファイルを設定できました。よくわからないのは、そのアカウントに許可されている操作を制限するために必要な追加情報です。たとえば、次のようなコマンドを入力できることを知っています。

no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding

次のような authorized_keys ファイルの行が必要です。

permitopen="host.domain.tld:443",no-pty,no-agent-forwarding,no-X11-forwardi
ng,command="/bin/noshell.sh" ssh-rsa AAAAB3NzaC.......wCUw== zoredache 
于 2008-10-08T07:49:34.603 に答える
0

次のような C プログラムを作成しました。

#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
void sig_handler(int signo)
{
    if (signo == SIGHUP)
        exit(0);
}

int main()
{
    signal(SIGINT, &sig_handler);
    signal(SIGTSTP, &sig_handler);

    printf("OK\n");
    while(1)
        sleep(1);
    exit(0);
}

制限付きユーザーのシェルをこのプログラムに設定しました。

ssh server commandコマンドはシェルを使用して実行され、このシェルは何も実行しないため、制限されたユーザーは何も実行できないと思います。

于 2014-11-17T01:12:03.463 に答える
-1

公開鍵の認証に関するこの投稿を参照してください。

覚えておく必要のある主な2つのことは次のとおりです。

  1. あなたを確認してくださいchmod 700 ~/.ssh
  2. 公開鍵ブロックを許可鍵に追加します
于 2008-08-11T18:01:48.493 に答える
-3

ユーザーが使用しているsshクライアントを介して、ユーザーのマシンでキーを生成します。たとえば、pUTTYには、これを正確に実行するためのユーティリティがあります。秘密鍵と公開鍵の両方を生成します。

生成された公開鍵ファイルの内容は、authorized_keysファイルに配置されます。

次に、公開鍵を生成した秘密鍵を使用するようにsshクライアントが構成されていることを確認する必要があります。かなり簡単ですが、使用しているクライアントによって少し異なります。

于 2008-08-11T18:04:01.640 に答える