在 SSH 用户身份验证过程中,有没有办法可以区分 SSH 会话与 SSH 内联命令?我尝试过检查 tty 但在这两种情况下它们对我来说都是一样的。在我的场景中,我需要一种方法来阻止用户(在身份验证期间)执行“ssh user@hostname 'some cmd'”,但允许用户通过 SSH 登录,否则使用相同的用户帐户。
答案1
在 PAM 身份验证期间这是不可能的——pam 没有任何有关传递到 ssh 的命令的信息。只有 ssh 服务器可以区分这些类型。但请注意,不将命令参数传递给 ssh 意味着它在内部执行用户 shell(通常是 bash)。
您可以通过使用sshd_config
muru 已提议的以下内容来实现您所描述的内容:
Match testuser
ForceCommand /bin/bash -il
这将始终为用户运行交互式 shell,即使他指定了 ssh 的命令参数。如果您想在传递不同命令的情况下显示一些消息,则必须编写一些简单的脚本,该脚本将代替 bash 被调用,并检查 ,SSH_ORIGINAL_COMMAND
如果已设置,则执行您选择的适当操作。