通过套接字从Python连接到远程Memcached

时间:2019-05-03 11:38:23

标签: python sockets ssh memcached netcat

我需要从本地Python程序访问远程服务器上的Memcached,以便执行设置/获取操作。连接将通过SSH建立,而Memcache本身可通过套接字(/var/run/memcached/memcached.sock)访问。

基本上,我有两种选择:

  1. 最方便的一种-使用“ memcache”之类的库,并实现“ set”和“ get”之类的方法。

    import memcache
    mc = memcache.Client(['127.0.0.1:11211'], debug=0)
    
    mc.set("some_key", "Some value")
    value = mc.get("some_key")
    

这里的问题是客户端的连接字符串。我是否可以使用某种SSH连接字符串或选项,例如

mc = memcache.Client(['123.321.123.321:/var/run/memcached/memcached.sock'], ssh_key="~/.ssh/mykey.pem", debug=0)

找不到“ memcache”以及任何其他库这样的东西。

  1. 使用netcat。

我设法通过一些不同的服务(不是用Python编写)通过更早的方式设置了一些数据:

import sys, paramiko, getpass

user = "ubuntu" 
key_file = "/Users/my_user/.ssh/my_key.pem" 
name = "123.321.123.321" 
command = "echo 'get my_data_123' | nc -U 
/var/run/memcached/memcached.sock" 

ssh = paramiko.SSHClient() 

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname = name, username = user, key_filename = 
 key_file) 

ssh.invoke_shell()
stdin, stdout, stderr = ssh.exec_command (command)
print(stdout.read())

因此,结论是连接和Memcached正常工作。但是,我还没有成功执行正确的“设置”命令。 我尝试过:

echo 'set mykey123 0 50 15 my_data' | nc -U /var/run/memcached/memcached.sock

...以及许多不同的变体,例如:

echo -e 'set mykey321 0 200 20\r\nmy_data\r' | nc -U /var/run/memcached/memcached.sock

它无法设置任何数据,没有响应或某种错误响应,例如

CLIENT_ERROR bad command line format

或者只是简单

ERROR

我是否缺少某些东西(可能,因为有关此文档的信息很少),或者也许由于其他原因无法实现?

0 个答案:

没有答案