阻止交互式 SSH 会话,同时允许某些命令

阻止交互式 SSH 会话,同时允许某些命令

如何仅允许通过 SSH 运行某些命令并阻止交互式会话?

rsync.net 和 bakop.com 都可以做到这一点。

即这会起作用:

ssh <user@host> mkdir test
scp <file> <user@host>:test/

而这不会:

ssh <user@host>

答案1

您可以利用使用command=authorized_keys中的指令和SSH_ORIGINAL_COMMAND传递给远程系统的变量将密钥限制为特定命令的功能。

在 authorized_keys 文件中,将包含相关密钥的行从

ssh-rsa AAAAB3NzaC1yc...

command="/path/to/myscript" ssh-rsa AAAAB3NzaC1yc...

然后创建 myscript 文件,例如

#!/bin/bash

if [  ! -n "$SSH_ORIGINAL_COMMAND" ]
then
    echo "No command supplied"
    exit 1
fi


set $SSH_ORIGINAL_COMMAND

case "$1" in
    ls)
      ;;
    md5)
      ;;
    *)
      echo "invalid command"
      exit 1
      ;;
esac

    exec "$@"

所以现在如果你运行,你将得到一个远程目录的列表。你可能想要使用 case 语句来测试提供的参数是否满足你的实现要求。ssh [email protected] ls /etc/etc

答案2

您可能不想从头编写自己的 shell,而是想要扩展它:

https://github.com/scponly/scponly/wiki

它提供了一个您可以设置为用户的 shell(即usermod或直接在 中/etc/passwd),它仅支持 SCP。您需要将其扩展到您选择的几个选定二进制文件,其中不应有交互式 shell(例如/bin/bash/bin/sh)。更谨慎的是,他们不应该能够上传一个(例如 busybox 二进制文件)并设置可执行位,以便他们可以放入自己的 shell。

答案3

为该用户使用不同的 shell - 如果有特殊要求,您可能需要自己编写 shell,但需要非常小心!许多 shell 已经提供了受限操作,但它们可能对您来说还不够严格。

尽管 Scp 可以创建目录 - 那么您还需要允许用户通过交互式 ssh 做什么?

相关内容