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 воссоздает их и потеряйте настройки, установленные вами.