ssh - ForceCommand, выполняющийся в сеансе sftp

Я добавил следующую строку в свой sshd_config:

...
ForceCommand /bin/ssh-alert
...

ssh-alert файл выглядит так

#!/bin/bash
SSH_IP=$(echo $SSH_CLIENT | head -n1 | awk '{print $1;}')
yowsup-cli demos -c $YOWSUP_CONF -s $PHONENUMBER "SSH Alert! Login from IP $SSH_IP" > /dev/null 2>&1

#the important part:
/bin/bash --login

Теперь проблема в том, что, если я запускаю SSH-сессию в программе MobaXTerm, окно SFTP будет пустым, и после закрытия ssh-сессии оно говорит: Waiting for the pending transfer to complete...,

Если я изменю /bin/bash --login в ssh-alert подать в /bin/bash (без --login) Это снова работает, но мои.bashrc, .bash_profile, /etc/bash.bashrc не будут получены.

Есть ли способ выполнить ForceCommand, только если это сеанс SSH, а не сеанс SFTP. Или способ проверить, является ли это сеансом SFTP в моем bash-скрипте.

ПРИМЕЧАНИЕ. Мой.bash_profile имеет команду с выводом. Если бы я отключил этот вывод, он бы снова заработал.

РЕДАКТИРОВАТЬ: FileZilla SFTP тоже не работает!

2 ответа

Решение

Есть ли способ выполнить ForceCommand, только если это сеанс SSH, а не сеанс SFTP.

Нет.

Или способ проверить, является ли это сеансом SFTP в моем bash-скрипте.

Это то, что $SSH_ORIGINAL_COMMAND для. Вы должны быть в состоянии различать, используя это, если команда SFTP или нет

ПРИМЕЧАНИЕ: мой .bash_profile есть команда с выводом. Если бы я отключил этот вывод, он бы снова заработал.

Это проблема, которая нарушает протокол SFTP. Вы не должны генерировать какие-либо выходные данные, если оболочка не является интерактивной:

if [ "$PS1" ]; then
  # generate output
fi

Если ForceCommand управляется sshdзатем демон прекращает любые дальнейшие действия с этим сеансом. Он никогда не проверит, является ли это sftp и нужна ли ему "подсистема sftp". Сеанс SFTP не может общаться с bash, Это то, что ssh а также scp для.

Чтобы SFTP работал, ForceCommand скрипт должен в конце концов исполнить /usr/lib/openssh/sftp-server или какой-то похожий обработчик.

Другие вопросы по тегам