14

redis auth を使用するための redis node.js ドキュメントを入手できません。

例ごとに:

var redis = require("redis"),
client = redis.createClient();

// This command is magical. Client stashes the password and will issue on every connect.
client.auth("somepass");

私のコードには次のものがあります。

var redis = require("redis");
r = redis.createClient(6379,'xxx.xxx.xxx.xxx');
r.auth("yyyyyyyy");

app.get('/', function(req, res){
r.set("foo", 'bar');
res.writeHead(200, {'Content-Type': 'image/gif'});
res.end('Hello');
 });

これが私が得るエラーです:

    Express server listening on port 8070 in development mode

/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/node_modules/redis/index.js:468
                throw callback_err;
                      ^
Error: Auth error: Error: ERR Client sent AUTH, but no password is set
    at Command.callback (/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/node_modules/redis/index.js:163:43)
    at RedisClient.return_error (/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/node_modules/redis/index.js:464:25)
    at HiredisReplyParser.<anonymous> (/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/node_modules/redis/index.js:253:14)
    at HiredisReplyParser.emit (events.js:67:17)
    at HiredisReplyParser.execute (/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/node_modules/redis/lib/parser/hiredis.js:41:18)
    at RedisClient.on_data (/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/node_modules/redis/index.js:440:27)
    at Socket.<anonymous> (/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/node_modules/redis/index.js:70:14)
    at Socket.emit (events.js:67:17)
    at TCP.onread (net.js:367:14)
[7]+  Killed                  node app.js 8070

では、認証する適切な方法は何ですか?

4

6 に答える 6

5

また、この問題の別の理由として、redis-server の起動時に redis.conf を指定していない可能性があります (「requirepass」を入れた場合)。

その場合、redis サーバーはデフォルトの構成 (つまり、「requirepass」オプションを有効にしない) で起動するため、AUTH コマンドを受け入れません。

./src/redis-server redis.conf
于 2013-12-19T12:06:49.457 に答える
1

新しいバージョンの Redis は、デフォルトで保護モードを有効にし、ループバックと UNIX ドメイン ソケットのみを受け入れます。

extern から接続するには、redis.conf でbind publicip anotherip etc andにバインドしrequirepass foobaredます。でテストしredis-cli pingます。誰もでき
ない場合:)requirepassFLUSHALL

保護を強化するために、ファイアウォールがポート アクセスをフィルタリングできるようにします。クイックスタート セキュリティ ノートも参照してください。

ポートを公開する代わりに、(一時的に) ssh トンネルを使用できます: シンプルで暗号化されたトンネルが必要だったので、クライアント側で実行します:

 ssh -f -N -L 6379:127.0.0.1:6379 user@<serverip>

開始する前node index.jsに、redis はサーバー側のループバック アドレスに保存され、ssh キーをセットアップして、クライアント (バックグラウンド プロセス ps -x の場合は -f -N) でポート転送を使用します。
永続的な場合は、推奨されるspipedを調べる必要があります。

于 2018-08-10T12:53:25.757 に答える
1

これは auth を使用する正しい方法です。

プロトコルが node_redis でサポートされていない古いバージョンの Redis サーバーを使用しようとしていると思います (またはその逆)。

または、パスワードで保護されていると思われるインスタンスに接続していないか、対象のインスタンスの構成でパスワードを設定していない可能性があります。

redis-cli を使用してインスタンスに接続し、auth を使用して認証をテストすることをお勧めします (つまり、node.js をバイパスします)。

于 2012-05-19T17:09:19.130 に答える
0

あなたと私は同じ問題を抱えていると思います。ここで、redis モジュール自体をオプションとして RedisStore コンストラクターに渡すことで、なんとか修正できました。

Node.js と socket.io での Redis 認証エラー

これがないと、RedisStore モジュールは、渡された RedisClient オブジェクトを「真の」 RedisClient オブジェクトとして認識せず (のredis からの redis.RedisClient クラスになるため)、RedisStore はそれらを再作成し、認証を失います。あなたが設定した。

于 2012-11-20T06:35:44.720 に答える
0

redis auth documentation の下を見て、同じ問題を抱えている他の人を見つけました

http://redis.io/commands/auth

そこからフォローした方がいいかもしれません

于 2012-05-19T17:10:11.957 に答える