我正在django和mysql数据库一起开发API。现在,我有了将mongodb数据库与django连接的新要求。我使用了以下解决方案
// say that we are in "About Us" page
this.$nuxt.$route.name // returns 'about-us'
this.$nuxt.$route.path // returns '/about-us'
现在我正在关注
sshtunnel.BaseSSHTunnelForwarderError:无法建立与SSH网关的会话
在Django项目中连接mongodb的好方法吗?
答案 0 :(得分:0)
我认为与您的连接方式无关。该消息表示您的SSH配置中的某些内容不正确。
SSHTunnelForwarder
应该用SSH主机,端口,用户和密码实例化,因为您首先需要访问可从中连接到Mongo主机的主机(运行sshd的主机)。我也看不到您要在哪里传递密钥进行身份验证。确保根据您拥有的密钥类型来定义<your-key-instance-here>
(例如,使用paramiko
的RSA类型密钥:paramiko.RSAKey.from_private_key_file('/path/to/your/ssh/key/file')
)。之后,在客户端中,您需要指定Mongo用户名和密码:
@contextmanager
def _tunnel():
with SSHTunnelForwarder((ssh_host, 22),
ssh_username=SSH_USER,
ssh_pkey=<your-key-instance-here>,
remote_bind_address=(MONGO_HOST, MONGO_PORT)
) as tunneled_conn:
yield pymongo.MongoClient('mongodb://%s:%s@127.0.0.1' % (MONGO_USR, MONGO_PWD),
port=tunneled_conn.local_bind_port
)
然后在您的代码中将其用作
with _tunnel() as mongo_client:
...
答案 1 :(得分:0)
我收到此问题,因为我的SSH密钥不是开放的ssh格式。逐步介绍SSHTunnelForwarder代码,失败部分与使用paramiko库加载SSH密钥有关,该库加载了以下类型的SSH密钥:
我写了一个助手来直接测试它(见下文)。 另一个要注意的是,路径中可能找不到SSH密钥。
解决关键问题。使用PuttyGen: PuttyGen->加载私钥->转换->导出打开的SSH。
if not (path.exists(SSH_file_full_path)):
raise Exception("SSH file not found!")
import paramiko
try:
k = paramiko.RSAKey.from_private_key_file(SSH_file_full_path,key_file_password)
except paramiko.ssh_exception.PasswordRequiredException as e:
print(sys.exc_info()[0])
raise Exception("Problem with SSH key. Probably the password is wrong.")
except paramiko.ssh_exception.SSHException:
print(sys.exc_info()[0])
raise Exception("Problem with SSH key. Most probably not open SSH format.")
except Exception as e:
print(sys.exc_info()[0])
raise Exception("Unknown SSH key load problem.")