I have a remote redis machine with no ssh and no open ports except to the same lan + a remote machine (on the same lan) with ssh + my pc outside the lan. What I'm trying to do (mostly to see if it's possible) is redis-cli on my pc -> ssh tunnel to the ssh machine -> something -> redis so it would work. Is netcat + mkfifo the right way? Thanks :)

up vote 5 down vote accepted

Assuming the following:

  • YOUR_PC, has Redis client, SSH client, SSH access to SSH_SERVER
  • SSH_SERVER, has SSH server, redis access to REDIS_SERVER
  • REDIS_SERVER, has Redis server

Set up the tunnel from YOUR_PC, port 1234, to REDIS_SERVER:REDIS_PORT, via SSH_SERVER

ssh SSH_SERVER -L 1234:REDIS_SERVER:REDIS_PORT

On another terminal, on YOUR_PC, run the redis client (based on https://stackoverflow.com/a/40678950):

redis-cli -h localhost -p 1234

We have redis connected through stunnel. That way you don't have to always establish the ssh connection, which can be a problem. Here is an article on how to setup redis through stunnel, which I won't copy into this answer. Feel free to edit.

http://bencane.com/2014/02/18/sending-redis-traffic-through-an-ssl-tunnel-with-stunnel/

This works, I wonder if there is a better solution. SSH tunnel + nc proxy

ssh $ssh_server -L $port:localhost:$port "mkfifo /tmp/backpipe; nc -k -l localhost $port 0</tmp/backpipe | nc $redis_server $port | 1>/tmp/backpipe"

Your Answer

 
discard

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.