在一些场景下,我们可能需要在本地连接到某些服务,但这些服务的端口并不对外暴露。例如,像Nacos这样的服务,需要在本地完成配置但是并不推荐将其暴露到公网。在这种情况下,SSH隧道是一种常用的解决方案,它允许我们通过加密的 SSH 连接将本地端口转发到远程服务器的私有端口。
然而,当需要其他人参与连接时,我们可能不希望他们获得过多的服务器操作权限。为了安全起见,我们可以为他们创建一个仅能使用SSH隧道的用户,限制他们的权限,确保他们只能通过隧道访问服务,而无法执行其他的服务器操作。
这里将介绍如何配置一个仅能使用 SSH 隧道的用户,并为他人提供安全的访问方式,避免不必要的权限泄露。
配置步骤
1. 创建用户
创建将要用于创建SSH隧道的用户,这里以devuser为例
sudo useradd -m devuser
2. 设置用户密码
为devuser用户设置连接密码(也可以配置密钥连接,这里省略)
sudo passwd devuser
3. 配置SSH仅允许端口转发
编辑SSH配置文件
sudo vi /etc/ssh/sshd_config
在配置文件底部新增如下配置:
Match User devuser
AllowTcpForwarding yes
X11Forwarding no
ForceCommand /bin/true
PasswordAuthentication yes
PermitTTY no
配置项的含义如下:
- AllowTcpForwarding yes:允许用户使用SSH隧道
- X11Forwarding no:禁用X11转发
- ForceCommand /bin/true:强制连接后执行一个无操作命令,防止其打开 shell 或执行其它命令
- PasswordAuthentication yes:使用密码验证
- PermitTTY no:禁止分配TTY(终端),使其无法启动一个交互式 shell
4. 重启SSH服务
sudo systemctl restart sshd
连接使用
通过ssh命令启动SSH隧道将服务器内部的端口映射到本机,连接服务器内部的服务,并且通过一定的参数配置保证连接的稳健
ssh -f -N -p 2222 \
-L 1234:localhost:3306 \
-L 5678:localhost:8080 \
-o ServerAliveInterval=60 \
-o ServerAliveCountMax=3 \
devuser@your_server_ip
-p参数表示SSH的连接端口,如果不使用默认端口22进行SSH连接的话需要填写-L参数表示本地的端口映射到服务器可访问IP的指定端口,例如本地1234端口映射到服务器localhost地址的3306端口上,支持映射多个-f和-N参数用于后台运行 SSH 会话和不执行远程命令-o ServerAliveInterval参数表示间隔多少秒向服务器发送心跳,用于保证连接在空闲时不断开-o ServerAliveCountMax参数表示没有受到服务器响应的最大重试次数- 最后一行是SSH连接的用户和服务器的IP地址(devuser@your_server_ip)
- 如果是在Windows CMD的操作下,将命令换行符号
\替换为^