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
или какой-то похожий обработчик.