ssh - ForceCommand executando na sessão sftp

2

Eu adicionei a seguinte linha ao meu sshd_config:

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

o arquivo ssh-alert é semelhante a este

#!/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

Agora, o problema é que, se eu iniciar uma sessão SSH no programa MobaXTerm, a janela do SFTP fica vazia e depois de fechar a sessão do ssh ele diz: Waiting for the pending transfer to complete... .

Se eu alterar /bin/bash --login no arquivo ssh-alert para /bin/bash (sem --login) Ele funcionará novamente, mas meu .bashrc, .bash_profile, /etc/bash.bashrc não será originado. / p>

Existe uma maneira de executar o ForceCommand apenas se for uma sessão SSH e não uma sessão SFTP. Ou uma maneira de verificar se é uma sessão SFTP no meu script bash.

NOTA: Meu .bash_profile possui um comando com saída. Se eu desabilitar essa saída, funcionaria novamente.

EDIT: O FileZilla SFTP também não funciona!

    
por Scrumplex 06.02.2017 / 12:01

2 respostas

1

Is there a way to only execute ForceCommand if it is a SSH session and not a SFTP session.

Não.

Or a way to check if it is a SFTP session in my bash script.

É para isso que o $SSH_ORIGINAL_COMMAND é. Você deve ser capaz de diferenciar usando isso se o comando for SFTP ou não

NOTE: My .bash_profile has a command with output. If I would disable that output it would work again.

Esse é o problema que está quebrando o protocolo SFTP. Você não deve gerar nenhuma saída se o shell não for interativo:

if [ "$PS1" ]; then
  # generate output
fi
    
por 06.02.2017 / 12:17
0

Se ForceCommand for executado por sshd , o daemon descartará qualquer ação adicional com esta sessão. Ele nunca irá verificar se é sftp e se precisa de um "subsistema sftp". A sessão SFTP não pode falar com bash , é para isso que são ssh e scp .

Para que o SFTP funcione, o script ForceCommand deve, no final, executar o /usr/lib/openssh/sftp-server ou algum manipulador semelhante.

    
por 06.02.2017 / 13:36