如何将所有请求从本地端口转发到使用自定义 ssh 端口的远程 Amazon EC2 实例上的端口

如何将所有请求从本地端口转发到使用自定义 ssh 端口的远程 Amazon EC2 实例上的端口

我尝试将所有请求从本地端口 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):

AllowTcpForwarding

指定是否允许 TCP 转发。可用选项为yes(默认)或all允许 TCP 转发、no阻止所有 TCP 转发、local仅允许本地(从 ssh(1) 的角度来看)转发或remote仅允许远程转发。请注意,禁用 TCP 转发不会提高安全性,除非用户也被拒绝 shell 访问,因为他们始终可以安装自己的转发器。

上面的默认值适用于 Debian 系统,可能不是 AWS 上的默认值sshd。该选项必须设置/etc/ssh/sshd_configyes/all或至少local启用端口转发:

AllowTcpForwarding yes

并且应重新加载或重新启动远程sshd服务器以使该选项生效新的连接。请注意,如果不在仍在使用的连接上快速纠正任何语法错误,则可能会阻止进一步的访问。

与启用端口转发相关的还有许多其他微妙之处。例如,用户的专用条目authorized_keys可以将其限制为仅特定端口(只要系统范围的配置仍然允许)。

相关内容