SSH隧道和Android

我正在开发一个应用程序的项目,该应用程序允许Android使用PHP API远程连接到MySQL数据库。 </ p>

用户已请求应用程序应支持我一直在研究的S​​SH隧道,但我对此有一些担忧。 </ p>

应用程序的工作原理是API在我的Web服务器上运行(用户可以选择在自己的服务器上安装,但大多数都没有),因此Android会向PHP API发送帖子 ,然后PHP直接连接到从android发布的消息中发送的MySQL主机,这一切都正常。</ p>

但是,如果我想支持SSH隧道,我的理解是 我的Android应用程序仍会发布到我的PHP API,但指示打开SSH隧道,例如将端口3306上的本地端口3307转发到远程主机example.com。然后PHP将通过端口3307上的127.0.0.1连接到MySQL。 </ p>

这很好,除非另一个用户决定在另一个用户正在进行隧道的同时使用端口3307,第二个用户会发生冲突,因为第一个用户已经打开3307所以他们 需要选择一个新的端口。 </ p>

我认为最好的解决办法就是API有一个可以使用的套接字池,并选择一个免费的套接字并通过指定的远程端口通过本地端口连接 android发送的端口。 例如。 例如,API将选择本地端口5000并转发到3306. </ p>

我担心的是,尽管这会起作用,但两个用户可能会同时发出请求 时间,并且API选择用作本地端口的相同端口号,例如 5000,因为这个端口在技术上是免费的,但是一个用户将成功连接,第二个用户最终将连接到第一个用户服务器,并且希望无法进行身份验证,但仍然存在潜在的风险。 </ p>

我是否认为这是正确的方法,或者是否有更好的方法,或者我应该只支持SSH隧道选项,如果用户从自己的Web服务器运行API而不是 因此,不会有与其他无关用户发生冲突的风险。 </ p>
</ div>

展开原文

原文

I am working on a project for an app that allows Android to remotely connect to an MySQL Database using a PHP API.

Users have requested that the app should support SSH Tunneling which I have been looking into but I have a few concerns regarding this.

How the app works is the API runs on my web server (the user has the option to install on there own servers but most don't) so Android sends a post to the PHP API, and then PHP directly connect to a MySQL Host that was sent in the post message from android, this is all working fine.

However, if I want to support SSH tunneling, my understanding is that my Android app would still post to my PHP API, but instruct to open an SSH tunnel, for example forwarding local port 3307 to remote host example.com on port 3306. Then PHP would connect to MySQL via 127.0.0.1 on port 3307.

This is fine, except if another user then decides to use port 3307 at the same time another user is doing a tunnel the second user would clash as the first user already has 3307 open so they would need to pick a new port.

I thought that then the best work around for this would be the API has a pool of sockets that it can use and picks one that is free and connects via that local port via the specified remote port that android sent. E.g. the API will for example pick local port 5000 and forward to 3306.

My worry here is that although this would work, there is a potential risk that two users could make a request at the same time, and the API picks the same port number to use as a local port, e.g. 5000, as this port is technically free but then one user would successfully connect, and the second user would end up connecting to the first users servers, and hopefully fail to authenticate but still, potential risk here.

Am I thinking of this the correct way, or is there a better way, or should I only support the SSH tunneling option if the user is running the API from there own web server instead of mine so there would be no risk of clashing with another unrelated user.

dongwoqin7034
dongwoqin7034 如果你想仔细考虑一下,我就在聊天了.stackoverflow.com/rooms/95290/random-musings-drew
接近 5 年之前 回复
dongyikong6207
dongyikong6207 所以也许考虑一下,看看你是否可以确定什么是可能的,并调整问题。缩小它。把它放进去。把它算作字数的三分之一
接近 5 年之前 回复
dtm41506
dtm41506 默认情况下,应用程序将使用我的Web服务器,但应用程序的用户可以选择在Web服务器上安装API,因此Web服务器将创建隧道而不是我的服务器
接近 5 年之前 回复
douwen9534
douwen9534 这就是为什么我很困惑为什么你开始谈论PHP制作隧道请求,好像你的用户通过他们自己的PHP服务器或其他什么东西连接!好像,“嘿,我们现在有SSH隧道”......但不是为了他们:P
接近 5 年之前 回复
dtbglv5450
dtbglv5450 不知道你的意思是什么,他们是Android用户,因为他们正在使用我的Android应用程序,从更多的研究它看起来不像我想做的可能。
接近 5 年之前 回复
dongqiang2358
dongqiang2358 那么现在用户已经要求应用程序支持SSH隧道这一短语是对非Android用户的引用呢?显然答案应该是你不是指Android用户。
接近 5 年之前 回复
dscss8996
dscss8996 我已经改写了语句1,希望更有意义,至于语句2,我的意思是我不能直接连接到数据库,无论有没有隧道,因为Android没有MySQL库所以必须回复发布到PHPAPI。
接近 5 年之前 回复
douchen4915
douchen4915 你能更好地解释这两个陈述吗?(1)但是,如果我想支持SSH隧道,我的理解是Android仍然会通过PHP发布,但是指示打开SSH隧道,......和(2)甚至通过隧道,因为Android不支持它
接近 5 年之前 回复
duansaxf095988
duansaxf095988 应用程序的几个用户已经请求了一个隧道(该应用程序已经发布),数据库无法直接访问,即使是通过隧道,因为Android不支持它,因此android必须发布到PHPAPI中为了做MySQL的事情
接近 5 年之前 回复
doupo5178
doupo5178 一个问题:为什么使用隧道和http/php?那么两个传输层?如果仅用于加密,则只需使用https访问API,无需隧道。如果不应该使用基于http的传输(为什么),但数据库应该直接通过隧道使用,那么你之间没有API,但这些应用程序充当sql客户端。再次:为什么?
接近 5 年之前 回复
douqiao3453
douqiao3453 如果它们足够复杂以便以用户身份使用SSH隧道,那么当它们提供用户名,密码等以配置隧道本身时,它们应该足够复杂以在设置屏幕中手动配置端口。“如果用户从自己的网络服务器而不是我的网络服务器运行API,我应该只支持SSH隧道选项”-嗯,这是唯一的选择。在你的应用程序中烘焙SSH用户凭据是一个比套接字冲突,恕我直言,更大的问题。
接近 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐