[运维篇]仅能通过SSH隧道连接服务器内部服务的用户的配置和使用

在一些场景下,我们可能需要在本地连接到某些服务,但这些服务的端口并不对外暴露。例如,像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的操作下,将命令换行符号 \ 替换为 ^

发布者

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注