O SSH não foi projetado para esse acesso sob demanda. No entanto, se o acesso ao shell (ou transferência de arquivos) é a única coisa com que você precisa se preocupar, você deve restringir as possibilidades de SSH e adicionar um script que não inicie um shell, a menos que você permita.
Para a parte limitadora de SSH, participei de Como criar um usuário SSH restrito para o encaminhamento de porta . Edite /etc/ssh/sshd_config
e adicione:
Match user your-username
AllowAgentForwarding no
ForceCommand ~/bin/ssh-confirm
Crie o executável ~/bin/ssh-confirm
(modo 755) e crie um script / programa no idioma à sua escolha, o que precisa ser confirmado antes de descartar um shell SSH, por exemplo:
#!/bin/bash
confirmfile="$HOME/allow-ssh-for-pid-$$"
if [ -f "$confirmfile" ]; then
echo "Old confirmation file found for the SSH session, exiting!"
exit 1
fi
# wait for a grant for 30 seconds before giving up
for ((i=0; i<30; i++)); do
if [ -f "$confirmfile" ]; then
rm "$confirmfile"
exec "$SHELL"
fi
sleep 1
done
echo "SSH access timed out."
exit 1
Isso exigiria que você criasse o arquivo "allow-ssh-for-pid - $$", em que $$
é o pid do script executado a partir do SSH. Você pode usar ps
, pidof
, etc para determinar o PID. É claro que pode ser mais sofisticado, como alertar você através de notify
, mas vou supor que as pessoas vão te dar um anel se tentarem acessar você.
Além disso, suponho que você confie nas pessoas que você concede acesso ao SSH. Caso contrário, crie um usuário separado (sem sudo
permissões, é claro;)) e armazene o ssh-confirm
em um local como /usr/local/bin
e armazene os tokens de acesso em algum outro lugar.
As tentativas de login (e logouts) do SSH são registradas em /var/log/auth.log
. Execute w
para obter uma lista de usuários logados (nota: você obterá várias entradas para os terminais abertos em sua máquina, preste atenção na coluna FROM
).