AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 997129
Accepted
Martin
Martin
Asked: 2019-12-31 07:24:57 +0800 CST2019-12-31 07:24:57 +0800 CST 2019-12-31 07:24:57 +0800 CST

Linux Bash Script para detectar (e notificar por e-mail) novas conexões SFTP ao servidor

  • 772

Estou procurando ajuda com um guia ou script de servidor Linux (CentOS) que possa ser usado para enviar um email para uma conta de servidor quando uma nova conexão SFTP for detectada. Por exemplo, fornecer o nome da conexão e o endereço IP solicitante, bem como o tipo de autenticação da conexão (se possível) (como chave SSH ou senha, etc.) .

Não tenho quase nenhuma experiência com scripts Bash, no entanto, fiz exatamente isso com sucesso, que detecta conexões SSH; no entanto, não consigo descobrir onde estender isso para notificar também o endereço de e-mail das conexões SFTP ao servidor,

Muito obrigado por qualquer ajuda sobre isso.

Eu percebo que esta é uma pergunta muito ruim e peço desculpas, mas os resultados do mecanismo de pesquisa estão me dando muitos resultados falsos, como "como faço SFTP para o meu servidor?!" etc., que são claramente inadequados.

Felicidades


Atualização 1

Portanto, /var/logs/secureele coleta as informações de conexão SFTP. Eu gostaria de ser capaz de pegar essa informação de alguma forma e jogá-la fora em um e-mail básico.

Meu detector SSH de trabalho atual faz isso em .bashrc:

echo -e 'ALERT - SSH access detected:' `date` `ls -l \`tty\` | awk '{print $3}'` '\n\nConnection Details: ' `w -h` '\n\nList of WHO: ' `who --login` | mail -s "Alert: Server Access Email Subject" [email protected]

Isso é chamado, acionado pelo CSF ​​(ConfigServerFirewall)

Eu gostaria de combinar de alguma forma os dois acima para que, quando uma linha de informação for adicionada ao /var/log/secure, como com:

Subsystem       sftp    /usr/libexec/openssh/sftp-server -l INFO

Em seguida, ele também poderá detectar os inícios da linha:

Chave pública aceita para ....

Que esta linha pode ser lançada em um e-mail para o endereço de e-mail ....


Atualização 2:

Talvez eu precise escrever meu próprio calço Bash ....


Atualização 3:

Graças a Piotr, meu código para o meu calço é agora:

#!/bin/bash
# Create a temporary log file
LOGFILE=$(/bin/mktemp /tmp/sftplog.XXXXXX)
# Redirect stderr to LOGFILE
exec 2>"$LOGFILE"

# Run the SFTP with logging to stderr
/usr/libexec/openssh/sftp-server -e -u 022 -l VERBOSE

# Use some sendmail substitute to send an e-mail
/usr/sbin/sendmail -i root@localhost <<EOF
From: [email protected]
To: [email protected]
Subject: SFTP connection for user $(LOGNAME)

Hello,
User $(LOGNAME) just connected to the SFTP server from $(SSH_CONNECTION).

Connection log:
$(<"$LOGFILE")
EOF

# echo -e "Hello,\nUser $(LOGNAME) just connected to the SFTP server from $(SSH_CONNECTION).\n\nConnection log:\n$(<"$LOGFILE")" | mail -s "SFTP connection for user $(LOGNAME)" [email protected]

# Delete the log
rm -f "$LOGFILE"

Eu executei a instrução sendmail na linha de comando e isso funciona corretamente, no entanto, novas conexões SFTP estão resultando em EOF durante a leitura do pacote .


Atualização 4

Reduzindo o script para:

#!/bin/bash
# Create a temporary log file

# Run the SFTP with logging to stderr
/usr/libexec/openssh/sftp-server -e -u 022 -l INFO
exec >/dev/null

Ainda retorna o EOF ao ler o problema do pacote ao conectar.


Atualização 5:

Definir as permissões do arquivo para serem idênticas às permissões do arquivo do subsistema original ( /usr/libexec/openssh/sftp-server) resolve o problema e o script é executado corretamente.

linux
  • 1 1 respostas
  • 1391 Views

1 respostas

  • Voted
  1. Best Answer
    Piotr P. Karwasz
    2019-12-31T14:44:37+08:002019-12-31T14:44:37+08:00

    O bom dos subsistemas ssh é que você pode substituir a implementação padrão ( internal-sftp como Martin observou) por outra implementação, por exemplo, um script wrapper em torno /usr/lib/openssh/sftp-serverde .

    Um pequeno exemplo: crie um arquivo /usr/local/bin/sftp-loggercom conteúdo:

    #!/bin/bash
    # Create a temporary log file
    LOGFILE=$(/bin/mktemp /tmp/sftplog.XXXXXX)
    # Redirect stderr to LOGFILE
    exec 2>$LOGFILE
    
    # Run the SFTP with logging to stderr
    /usr/lib/openssh/sftp-server -e -l INFO
    
    # In case of chatty sendmail
    exec >/dev/null
    
    # Use some sendmail substitute to send an e-mail
    /usr/sbin/sendmail -i root@localhost <<EOF
    From: sshd@localhost
    To: root@localhost
    Subject: SFTP connection for user $LOGNAME
    
    Hello,
    User $LOGNAME just connected to the SFTP server from $SSH_CONNECTION.
    
    Connection log:
    $(<$LOGFILE)
    EOF
    
    # Delete the log
    rm -f $LOGFILE
    

    Então você só precisa substituir o servidor SFTP padrão pelo seu script em /etc/ssh/sshd_config:

    Subsystem sftp /usr/local/bin/sftp-logger
    
    • 6

relate perguntas

  • Como descobrir detalhes sobre hardware na máquina Linux?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve