一种在 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 隧道中指定与正在使用的主机不同的主机的方法的主要内容,如果未能解决你的问题,请参考以下文章