Usando o comando em ssh authorized_keys quebra scp

1

Eu gostaria de usar o comando per key em authorized_keys para definir algumas variáveis de ambiente.

command="MYVAR=test $SHELL" ssh-rsa mykey

O Shell funciona bem, mas o scp não está funcionando.

Qual seria a maneira correta de definir variáveis de ambiente por chave e não quebrar as transferências de arquivos ssh?

    
por Laurynas 27.03.2012 / 23:52

2 respostas

4

Sua configuração força o ssh a executar qualquer comando que esteja em $SHELL sempre que você se conectar com a chave privada correspondente. Isso é bom se o que você quer é um shell interativo, mas quebrará qualquer tentativa de executar um comando diretamente. Isso quebra 'scp como você viu, mas também vai quebrar coisas como:

ssh myhost uptime

A solução é (a) definir suas variáveis de ambiente em outro lugar ( .ssh/rc ou apenas usar os arquivos de inicialização padrão do shell) ou (b) usar uma chave dedicada quando você deseja forçar um comando através de sua authorized_keys file.

    
por 28.03.2012 / 00:02
1

Então eu percebo que essa questão é antiga neste momento, mas eu descobri uma resposta para isso hoje. Essa é uma alternativa para configurar variáveis de ambiente e pode ser uma solução melhor dependendo da sua situação. Minha situação é esta:

Eu tenho uma instância do Splunk que inicia uma sessão SCP e SSH para um host remoto. Uma lista de e-mails é enviada via SCP e, em seguida, o SSH é usado para executar um script no sistema remoto para executar uma ação nessa lista de e-mails. Aqui está o topo do meu arquivo authorized_keys:

command="/home/username/wrapper.sh",no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAAB3 etc...

Este é o meu script wrapper.sh:

#!/bin/bash

vars=( $SSH_ORIGINAL_COMMAND )
case "${vars[0]}" in
        "/home/username/scripts/myscript.py")
                /home/username/scripts/myscript.py ${vars[1]}
                exit 0
                ;;
        "scp")
                scp -t ${vars[2]}
                chmod 644 ${vars[2]}
                exit 0
                ;;
        *)
                exit 1
                ;;
esac

O primeiro caso permite /home/username/scripts/myscript.py com quaisquer parâmetros de linha de comando que foram passados para ele. A segunda entrada do caso scp permite que o arquivo recebido seja gravado no disco no local pretendido.

Esse método me permite limitar o uso da chave pública para 1 comando e ainda permitir scp. Se alguém tiver uma opção melhor, por favor, compartilhe. :)

    
por 13.03.2017 / 22:29