Unix Shell/SSH 配置允许 TCP 端口转发而不显示命令提示符

Unix Shell/SSH 配置允许 TCP 端口转发而不显示命令提示符

我正在运行 Debian Linux。我想要一个能够通过 SSH 连接以进行 TCP 转发的用户帐户仅有的,无需命令提示符。

例如下面的操作可以工作(从远程计算机):

ssh -D1234 user@myhost

但不会出现命令提示符。

使用像 /bin/false 或 /sbin/nologin 这样的 shell 限制太多,因为它甚至不允许用户登录。只允许“exit”或 Ctrl+D 命令的 shell 就可以完成这项工作。

我知道有类似的东西可以只允许 SFTP,但我找不到 TCP 转发的等效方法。

谢谢

答案1

听起来您正在寻找以下-N选项:

-N      Do not execute a remote command.  This is useful 
        for just forwarding ports (protocol version 2 only).

就像这样:

ssh -D 8080 -N [email protected]

另外可能还有一些有趣的-f选项:

 -f      Requests ssh to go to background just before command execution.  
         This is useful if ssh is going to ask for passwords or passphrases, 
         but the user wants it in the background.  This implies -n. 
         The recommended way to start X11 programs at a remote site is 
         with something like ssh -f host xterm.

如果您想要限制入站连接可以执行的操作:

  • 在您的文件中设置自定义命令authorized_keys(假设您使用 ssh 密钥)
  • 更改用户的 shell

您使用什么命令/shell 取决于您想要允许什么。例如:

  • /bin/cat将保持连接打开但不执行任何操作
  • rssh将允许您自定义可用的操作
  • chroot 监狱 shell 将提供类似的可定制性
  • bash可以在受限模式下运行(rbash),该模式仅允许您在配置的 中运行命令PATH。它不是万无一失的,但总比没有好。

答案2

我不确定这是否可行。我有一个集群,我希望人们在前端工作,但他们不允许在计算节点上工作。所有人在所有计算机上都有帐户,但是,节点中有以下几行/etc/profile

if test "$TERM" != "linux" && test "$USER" != "root" ;then
  echo ""
  echo -e "\\033[0;34m=======================================================================\\033[0;39m"
  echo ""
  echo -e "\\033[0;31m         Login to this host is allowed for administrator only.\\033[0;39m"
  echo -e "            Please use \\033[0;34mqueue\\033[0;39m to submit your jobs instead"
  echo -e "    or \\033[0;34m132.187.71.6\\033[0;39m or  \\033[0;34m132.187.71.7\\033[0;39m to login into cluster front-end."
  echo ""
  echo -e "\\033[0;34m=======================================================================\\033[0;39m"
  echo ""
exit
fi

$TERM检查登录是否为直接登录的部分(IEssh或通过排队系统。最后一个是允许的。如果您希望允许特定用户登录,您可以在 if 语句中添加&& test "$USER" != "someuser"

相关内容