我想在管理员用户的每个 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 隧道/跳线盒