Estou tentando impedir que um usuário ssh execute comandos indesejados por meio do ssh de um host remoto. Para isso estou usando o comando forçado no arquivo authorized_keys que permitirá que o usuário ssh execute somente um comando em particular.
Se eu não definir isso, posso fazer o login via ssh e sftp.
Como posso diferenciar se a conexão remota é emitida via ssh ou sftp em um script de shell?
O comando que estou esperando é o seguinte e ambos devem funcionar: -
ssh ssh-usuario @ hostname test_scripts.sh
sftp ssh-user @ hostname
Eu usei a variável $ TERM para diferenciar entre ssh e sftp. Se for sftp, o $ TERM retornará 'mudo'. Mas quando estamos passando um comando através do ssh, então o $ TERM está retornando mudo.
Alguma ideia de como diferenciar?
Adicionando mais detalhes à questão: -
se [$ TERM = 'burro']; então
$ SSH_ORIGINAL_COMMAND #Se o sftp, execute este
else
echo "Isto é ssh" #If ssh, execute isto
fi
O script acima é o invocado via comando forçado. Quando eu estou conectando remotamente através de ssh, então eu estou recebendo a mensagem como esperado como "This is ssh"
ssh ssh-user @ hostname
Isso é ssh
E quando estou tentando conectar-me através do sftp, então, como esperado, a condição if foi confirmada e estou recebendo o prompt do sftp.
sftp ssh-user @ hostname
sftp >
Mas quando estou passando um comando junto com o comando ssh, o $ TERM é definido como mudo. Então a condição if se tornou realidade.
ssh ssh-usuario @ hostname ls
Eu preciso distinguir entre os dois últimos métodos no script acima. Alguém poderia me ajudar nisso?