autenticação de chave ssh não funciona da rede / if-up.d / scripts

1

Eu tenho dois scripts quase idênticos em network/if-up que precisam acessar as chaves SSH. As permissões em chaves privadas SSH são 600, então como meus scripts podem acessar essas chaves?

Eu preferiria manter as chaves SSH associadas a uma conta de usuário configurada para a tarefa executada por esses scripts.

Eu não sei como encontrar o usuário que executa os scripts em network/if-up e também não tive sorte ao tentar usar su -l -c "my_command" mytaskuser em meus scripts. Espero que esteja cometendo um erro simples.

No Ubuntu meus scripts estão localizados em /etc/network/if-up.d e em outras distros (por exemplo, openSuse) eles estão em etc/sysconfig/network/if-up.d .

Ambos os meus scripts são parecidos com isso (vou usar apenas um exemplo para manter a questão focada):

#!/bin/sh
LOGDATE="_'date +%Y-%m-%d_%H%M'"
scp -i /home/mytaskuser/.ssh/id_rsa /home/mytaskuser/some.log  [email protected]:somelog${LOGDATE}.log
exit 0

O script funciona totalmente corretamente se eu fizer login como mytaskuser e executá-lo manualmente. Ele falha sem nenhuma mensagem de erro óbvia quando executado automaticamente em if-up.d/ .

Eu tentei variações como esta:

#!/bin/sh
LOGDATE="_'date +%Y-%m-%d_%H%M'"
su -l -c "scp -i /home/mytaskuser/.ssh/id_rsa /home/mytaskuser/some.log  [email protected]:somelog${LOGDATE}.log" mytaskuser
exit 0

Isso não funcionou. A única maneira de o script funcionar é quando eu o executo enquanto estiver logado como o usuário que possui a chave SSH (id_rsa).

    
por MountainX 13.07.2013 / 21:48

1 resposta

1

Se você executar scp como root, ele procurará por arquivos no diretório pessoal do root, incluindo o arquivo known_hosts . Se a chave pública do servidor não estiver em ~/.ssh/known_hosts , o ssh solicitará que o usuário pergunte se deseja adicionar a chave. Se não houver terminal para solicitar o usuário, o ssh se recusará a conectar, pois não pode garantir que o host seja o correto.

Você deve executar scp como seu próprio usuário ( mytaskuser ).

su -c "scp -i ~/.ssh/id_rsa ~/some.log  [email protected]:somelog${LOGDATE}.log" mytaskuser

Não passe a opção -l para su : que executa um shell de login, que ignora o comando passado com -c .

    
por 14.07.2013 / 02:18