sshd_config ForceCommand 正在阻止 scp

sshd_config ForceCommand 正在阻止 scp

我想在管理员用户的每个 SSH 连接上执行某些脚本,为此我添加了以下几行sshd_config

Match User admin
  ForceCommand /etc/my_script.sh

脚本在管理员用户的每个 SSH 连接上执行。但是现在不允许进行 SCP/SFTP 吗?仅 SSH 有效。我需要 SSH、SCP 和 SFTP 访问权限。

my_script.sh:

#!/bin/sh

ip=$(echo $SSH_CONNECTION | awk '{print $3}') 
if [ "$ip" == "192.168.200.101" ]; then
    echo -ne "Detected ssh connection over USB... \n" 
    echo -n "-----------------------------------------\n" 
    sudo -s . /etc/my_script2.sh
else
    echo -ne " continuing user login ...\n "
    exec "/sbin/console.sh"`
fi

答案1

当您使用SCP或SFTP协议时,SSH服务器必须执行SCP/SFTP服务器应用程序。正如你无条件力量 console.sh,你破坏了 SCP/SFTP。

您需要评估SSH_ORIGINAL_COMMAND变量来检测客户端是否想要使用 SFTP/SCP 并允许这样做。

如果您只想使用普通 SSH 终端连接来执行脚本,但允许 SFTP、SCP仍然允许随机命令执行,解决方案是简单地测试SSH_ORIGINAL_COMMAND脚本中的(非)空。一个本机解决方案 - 将其放在脚本的顶部:

if [[ $SSH_ORIGINAL_COMMAND ]]; then
    eval "$SSH_ORIGINAL_COMMAND"
    exit
fi

(未经测试+我不是 shell 专家,可能有更好/更安全的解决方案)


有点相关的问题,有更多技术细节:
无缝 SFTP 隧道/跳线盒

相关内容