我使用以下命令建立到我的 ubuntu 服务器的 ssh 隧道:
ssh -fNg -L 8888:127.0.0.1:22 -p 1000 username@server-address -v
然后我将 OSX http 和 https 代理设置为 127.0.0.1:8888
我收到以下错误:
SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2
协议不匹配。
这是什么问题?我该如何解决?
答案1
-L 8888:localhost:22 将把您本地的 8888 端口转发到 ssh 服务器的 22 端口。只要没有 squid 服务器或其他代理正在运行,它就不会起作用。
SSH 可以提供 socks 代理,您可以使用它来浏览您的 ssh 隧道。
ssh -fNg -D 8888 -p 1000 username@server-address -v
连接后只需设置代理:
localhost:8888
答案2
你写道“我使用以下命令与我的 ubuntu 服务器建立 ssh 隧道:
ssh -fNg -L 8888:127.0.0.1:22 -p 1000 用户名@服务器地址 -v
好的,所以你需要在端口 1000 上有一个 SSH 服务器
好的,因此客户端程序将连接到端口 8888,并且它发送到那里的任何内容都将被转发到端口 22(22 是 ssh 常用的端口)。
我想如果你试图在 ssh 中隧道化 ssh 这可能是有意义的,尽管我无法一下子想到这样做的必要性!
然后我将 OSX http 和 https 代理设置为 127.0.0.1:8888”
不,您已经让 SSH 打开一个端口来监听 8888 端口。您不能让其他东西监听该端口。
如果您将 http[s] 代理放在目标计算机(服务器地址)的端口 22 上,并将 Web 浏览器配置为使用代理 127.0.0.1:8888,那么您的 Web 浏览器可以连接到端口 8888,并将转发到目标计算机端口 22 上的 http 代理。当您这样做时,-L 8888:127.0.0.1:22
意味着您必须在目标计算机的端口 22 上监听某些东西。您可能希望将 22 更改为更合理的值,例如 8080 我还没有测试过,但我认为它会起作用
另外,SSH 也有一个 -D 选项,它充当可以执行 HTTP[s] 的 SOCKS 代理,但会告诉 Web 浏览器连接到 SOCKS 代理而不是常规 HTTPS。所以我想,就像 David 说的那句话一样,ssh -fNg -D 8888 -p 1000 username@server-address -v
-fNg 和 -v 当然不是必需的。