一种在 SSH 隧道中指定与正在使用的主机不同的主机的方法

Posted

技术标签:

【中文标题】一种在 SSH 隧道中指定与正在使用的主机不同的主机的方法【英文标题】:A way to specify a different host in an SSH tunnel from the host in use 【发布时间】:2011-02-28 10:52:05 【问题描述】:

我正在尝试设置 SSH 隧道来访问 Beanstalk(绕过烦人的代理服务器)。

我可以让它工作,但有一个警告:我必须将我的主机文件中的 Beanstalk 主机 URL (username.svn.beanstalkapp.com) 映射到 127.0.0.1(并使用 ip 代替域建立隧道时)。

原因(我认为)是我使用本地 SSH 实例(在雪豹上)创建隧道,如果我在与 Beanstalk 交谈时使用 localhost 或 127.0.0.1,它会拒绝授权凭据。我相信这是因为 Beanstalk 使用请求中指定的主机名来确定应该检查用户名/密码组合的帐户。如果使用 localhost,我认为请求中缺少此信息(以 Beanstalk 需要的某种方式)。

目前我正在挖掘 username.svn.beanstalkapp.com 的 IP,将 username.svn.beanstalkapp.com 映射到主机文件中的 127.0.0.1,然后对于隧道,我使用以下命令:

ssh -L 8080:ip:443 -p 22 -l tom -N 127.0.0.1

我可以告诉 Subversion 那个 repo。位于:

https://username.svn.beanstalkapp.com:8080/repo-name

这使用我的隧道,并且接受用户名和密码。

所以,我的问题是在设置 SSH 隧道时是否有一个选项,这意味着我不必使用我的主机文件解决方法?

【问题讨论】:

根据您的研究,由于 Beanstalk 确实似乎使用 Host 标头来路由和验证您的请求,因此您可能不走运。您的客户端需要以某种方式提供 Host 标头,这属于 HTTP 协议。注入它肯定在 ssh 的范围之外(即有一个参数来指定它)。主机解决方法有什么问题?我的已经长得很长了,但我不介意。 澄清一下:这是 Beanstalk 的 Subversion 应用程序 (beanstalkapp.com/),而不是 Beanstalk 的工作队列 (github.com/kr/beanstalkd)。 【参考方案1】:

我会在您的主机文件中添加一个条目,将 127.0.0.1 映射到您需要的主机名,然后使用该主机名连接到您的隧道。

更新 hosts 文件是 IMO 的最佳选择。

【讨论】:

我在 Snow Leopard (Mac OS 10.6.3) 上。我现在已经这样做以使其正常运行,但我希望看看是否有新方法可以将主机名指定为 SSH 的参数,以避免必须将域映射到主机文件中的 127.0.0.1 .

以上是关于一种在 SSH 隧道中指定与正在使用的主机不同的主机的方法的主要内容,如果未能解决你的问题,请参考以下文章

SSH 隧道的自定义本地主机名

在 R 中使用 ssh 隧道连接到数据库 PostSQL

用于 sftp 或 GUI 的 ssh 隧道

如何在 11 以下的 iOS 中指定与安全区域的偏移量?

Postman中文文档——证书(Certificates)

利用云主机做 ssh 反向隧道