我正在运行 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
检查登录是否为直接登录的部分(IE)ssh
或通过排队系统。最后一个是允许的。如果您希望允许特定用户登录,您可以在 if 语句中添加&& test "$USER" != "someuser"