我有一个奇怪的问题。
我提出了一个新的 Linode 作为隧道端点。
我能够成功地远程转发端口 1194,所以现在连接到 linode-server@1194 到我机器的端口 1194 并且我能够通过连接到我的 linode-server 上的端口 1194 来连接到我的 VPN。
以下命令是我使用的(有效的):
ssh -N -R 1194:localhost:1194 [email protected]
现在我也想移植 443。我试过这个:
ssh -N -R 443:192.168.1.122:443 [email protected]
我的本地服务器故意监听 192.168.1.122(不是本地主机)。
但是,上述命令无法打开服务器上的 443 端口。我收到以下错误:
警告:监听端口 443 的远程端口转发失败
所以我检查了我的 linode-server 端口 443 上是否有任何东西在运行。没有什么是:
user@linode-server:~$ sudo netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:1194 0.0.0.0:* LISTEN 7438/sshd: user
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 411/systemd-resolve
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2377/sshd: /usr/sbi
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 1513/master
tcp6 0 0 :::1194 :::* LISTEN 7438/sshd: user
tcp6 0 0 :::22 :::* LISTEN 2377/sshd: /usr/sbi
tcp6 0 0 :::25 :::* LISTEN 1513/master
udp 0 0 127.0.0.53:53 0.0.0.0:* 411/systemd-resolve
user@linode-server:~$
服务器上没有软防火墙。而且Linode云防火墙已经关掉了,我还是不行。
我完全不知道为什么转发 443 不起作用。
PS - 创建隧道时用户身份验证工作正常。
我不确定这是否有帮助,但我的 sshd_config 看起来像这样:
user@linode-server:~$ cat /etc/ssh/sshd_config | grep -v "^#" | grep -v "^$"
Include /etc/ssh/sshd_config.d/*.conf
PermitRootLogin no
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes
GatewayPorts yes
X11Forwarding yes
PrintMotd no
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
user@linode-server:~$
澄清一下,里面什么都没有/etc/ssh/sshd_config.d/
linode-server 上的详细日志记录表单 sshd:
...
Aug 14 09:00:32 connect sshd[9499]: Postponed publickey for pi from *HIDDEN: My home public IP* port 49180 ssh2 [preauth]
Aug 14 09:00:32 connect sshd[9499]: Accepted key RSA *HIDDEN* found at /home/pi/.ssh/authorized_keys:1
Aug 14 09:00:32 connect sshd[9499]: Accepted publickey for pi from *HIDDEN: My home public IP* port 49180 ssh2: RSA *HIDDEN*
Aug 14 09:00:32 connect sshd[9499]: pam_unix(sshd:session): session opened for user pi by (uid=0)
Aug 14 09:00:32 connect systemd-logind[578]: New session 157 of user pi.
Aug 14 09:00:32 connect sshd[9499]: User child is on pid 9579
Aug 14 09:00:32 connect sshd[9579]: bind [0.0.0.0]:443: Permission denied
Aug 14 09:00:32 connect sshd[9579]: error: bind [::]:443: Permission denied
Aug 14 09:00:32 connect sshd[9579]: error: channel_setup_fwd_listener_tcpip: cannot listen to port: 443
...
为什么权限被拒绝?我上面使用的远程转发命令使用相同的用户(对于成功和失败的隧道)。
刚刚在这里发现可能是因为443是特权端口。现在我不想使用 root 用户在 443 上启用远程转发。我已锁定 linode-server 并且无法以 root 身份登录(并且我不想允许 root 登录)。根据上面的链接,我可以setcap
在 linode-server 上使用 , 但我该怎么做,因为隧道打开命令实际上是从我的本地运行的。我的替代方案是什么?我知道也许在 linode-server 上使用更高的端口会起作用,但我不想这样做。我真的很希望它是端口 443,所以我不需要记住端口。
问题是没有监听端口 443。需要有一个进程监听端口 443 才能连接到端口 443。如果您查看 netstat,您会发现您当前有一个进程正在监听端口1194,这就是连接到端口 1194 成功的原因。您需要更改该进程以侦听端口 443。
在本地服务器上,从端口 8080 发起远程端口转发(非特权端口)
在 linode-server 上,安装了一个名为
socat
并使用以下命令在 linode 服务器上从 8080 本地转发到 443 的工具,它现在可以工作了:)