我尝试将所有请求从本地端口 8888 转发到端口 8888 到我的远程 Amazon EC2 实例。唯一的区别是我的 EC2 实例在自定义端口 56129 上运行 ssh。
我可以从本地系统成功 ping 我的 ec2 实例,但是当我尝试将请求从本地端口转发到 ec2 实例上的端口时,我得到:
通道 2:打开失败:管理禁止:打开失败
我正在使用以下命令:
ssh -i <pem key> -NfL 8888:localhost:8888 <user>@<instance ip> -p 56129
然后它要求输入密码。当它接受密码时没有消息。但是当我在浏览器中打开 localhost:8888 时,我收到错误消息:
通道 2:打开失败:管理禁止:打开失败
一些观察结果——
使用密码运行
ssh -i <pem key> <user>@<instance ip> -p 56129
成功。我在 EC2 实例的端口 8888 上运行 Jupyter Notebook。 ssh-ing 进入实例后,curl localhost:8888 不返回任何内容
答案1
我认为你需要绑定本地地址才能实现你想要的:
ssh -i <pem key> -NfL localhost:8888:localhost:8888 <user>@<instance ip> -p 56129
或者
ssh -i <pem key> -NfL localhost:8888:<instanceip>:56129 <user>@<instance ip>
因为它不是 100% 清楚你想要实现什么。
测试用
telnet ipaddress portnumber
这可以让您提前连接(或不连接)并在运行时进行检查。
答案2
该消息告诉(远程)sshd
服务器设置不允许转发 TCP 端口。
sshd
应在远程服务器的配置上启用此选项(通常在 中/etc/ssh/sshd_config
):
指定是否允许 TCP 转发。可用选项为
yes
(默认)或all
允许 TCP 转发、no
阻止所有 TCP 转发、local
仅允许本地(从 ssh(1) 的角度来看)转发或remote
仅允许远程转发。请注意,禁用 TCP 转发不会提高安全性,除非用户也被拒绝 shell 访问,因为他们始终可以安装自己的转发器。
上面的默认值适用于 Debian 系统,可能不是 AWS 上的默认值sshd
。该选项必须设置/etc/ssh/sshd_config
为yes
/all
或至少local
启用端口转发:
AllowTcpForwarding yes
并且应重新加载或重新启动远程sshd
服务器以使该选项生效新的连接。请注意,如果不在仍在使用的连接上快速纠正任何语法错误,则可能会阻止进一步的访问。
与启用端口转发相关的还有许多其他微妙之处。例如,用户的专用条目authorized_keys
可以将其限制为仅特定端口(只要系统范围的配置仍然允许)。