Executar scripts automaticamente no servidor após a conexão ssh

11

como executar um script automaticamente no servidor logo após o sistema do cliente estabelecer conexão ssh com o servidor

por exemplo: suponha que um usuário faça logon no meu computador a partir de outro sistema (conectado via lan) usando a conexão ssh. Naquele momento, um script (python ou shell) deve ser executado automaticamente no meu sistema para executar alguma validação?

Como executar o script automaticamente no sistema do servidor?

Entusiasta
fonte

Respostas:

14

Você pode fazer isso adicionando o seguinte parâmetro ao seu arquivo de configuração (/ etc / ssh / sshd_config).

 ForceCommand
         Forces the execution of the command specified by ForceCommand, ignoring any command supplied by the client and ~/.ssh/rc if present.  The command is invoked by using the user's login shell
         with the -c option.  This applies to shell, command, or subsystem execution.  It is most useful inside a Match block.  The command originally supplied by the client is available in the
         SSH_ORIGINAL_COMMAND environment variable.  Specifying a command of “internal-sftp” will force the use of an in-process sftp server that requires no support files when used with
         ChrootDirectory.

Uma outra opção é usar os arquivos .ssh / rc por usuário.

Para usar o método ForceCommand, basta adicionar ForceCommand /usr/bin/ownscriptna parte inferior do arquivo /etc/ssh/sshd_config(no servidor).

O script fica assim:

#!/bin/bash
#Script file for ssh
#
#put your commands here
echo "test" > /tmp/test.txt
#
#exit by calling a shell to open for the ssh session
/bin/bash

Não se esqueça de chmod o script sudo chmod +x /usr/bin/ownscript

Solicitar
fonte
obrigado pela resposta. Poderia, por favor, dar um exemplo de comando
Entusiasta
mas se o comando force executa o comando no servidor (login do administrador) ou no login do cliente? Eu quero executar o comando no logon do servidor
Entusiasta
1
O comando é emitido no servidor. Basta adicionar o ForceCommand /path/command.script na parte inferior da sua configuração. No entanto, eu encontrei que ele apenas executará este comando, assim você precisará iniciar um shell no seu arquivo de script. Para melhor legibilidade, adicionarei um exemplo à minha resposta original.
requist
obrigado. posso executar o script python em vez do shell script?
Enthusiast
suponha que eu executar o meu comando personalizado, Existe alguma maneira de recuperar o endereço IP eo nome de login do usuário (Eu quero saber por causa de que meu login do comando foi executado?
Enthusiast
4

Você pode criar um /etc/ssh/sshrcarquivo. Veja man 8 ssh. Se você deseja isso para um único usuário, use ~/.ssh/rc.

Aqui está uma amostra /etc/ssh/sshrcque o notificará através do dbus quando alguém fizer login na sua máquina. Não se esqueça de chmod +x:

#!/bin/bash

ip=`echo $SSH_CONNECTION | cut -d " " -f 1`

notify-send -u CRITICAL "SSH connection from ${ip}" "User $USER just logged in from $ip"
leucos
fonte
1

Para execução de um script durante o logon, adicione-o como uma chamada no script / etc / profile. Isso é executado para todo logon, não apenas para logon ssh.

William Peckham
fonte
Estou preocupado com sistemas apenas clientes conectados usando uma conexão ssh
Enthusiast
1
Isso não funcionará consistentemente se os usuários tiverem shells diferentes, pois nem todos os shells são fonte de / etc / profile.
bschlueter