Node.js и Redis Auth

Я не получаю документацию redis node.js для использования redis auth.

в примере:

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


So, what is the proper way to auth?

Ответ 1

Другой причиной этой проблемы может быть не указание вашего redis.conf при запуске redis-сервера (если вы положите в него "requirepass" ).

В этом случае сервер redis начинается с конфигурации по умолчанию (т.е. без опции "requirepass" ) и поэтому не принимает вашу команду AUTH.

./src/redis-server redis.conf

Ответ 2

Это правильный способ использования auth.

Я считаю, что вы пытаетесь использовать старую версию сервера Redis, чей протокол не поддерживается node_redis (или наоборот).

Кроме того, вы не можете подключиться к экземпляру, который, по вашему мнению, защищен паролем, или вы не задали пароль в конфигурации экземпляра, на который вы нацелились.

Я предлагаю вам попробовать подключиться к экземпляру с помощью redis-cli и использовать auth для проверки подлинности (т.е. обход node.js).

Ответ 3

Redis в новых версиях включает защищенный режим по умолчанию, принимая только петлевые и доменные сокеты unix.

Для подключения из внешнего подключите либо redis.conf к bind publicip anotherip etc и requirepass foobared. Теперь протестируйте с redis-cli ping.
Если нет requirepass, то любой может FLUSHALL :)

Включите брандмауэр для фильтрации доступа к портам для дополнительной защиты, см. также заметки по быстрому запуску.

Вместо того, чтобы выставлять порты, вы можете использовать (временно) туннели ssh: Поскольку я хотел простой и зашифрованный туннель, запустите на стороне клиента:

 ssh -f -N -L 6379:127.0.0.1:6379 [email protected]<serverip>

перед запуском node index.js, поэтому redis сохраняется на своем сервере с обратной связью, и я использую переадресацию портов на клиенте (-f -N для фонового процесса ps -x) с настройкой ключей ssh.
Если вы настойчивы, вам следует ознакомиться с рекомендуемым spiped.

Ответ 4

Я нашел кого-то другого с той же проблемой, что и в документах redis auth

http://redis.io/commands/auth

Возможно, вам захочется следить за ним

Ответ 5

Я подозреваю, что у вас и у меня такая же проблема. Мне удалось исправить мой здесь, передав сам модуль redis в качестве опции для конструктора RedisStore:

Ошибка повторной авторизации с помощью Node.js и socket.io

Без него модуль RedisStore не будет распознавать объекты RedisClient, которые вы передаете как "истинные" объекты RedisClient (потому что они будут классом redis.RedisClient из другого redis), а RedisStore воссоздает их и потеряйте настройки, установленные вами.