Zoredache tinha isso. Nem uma única opção que passei na linha de comando poderia salvar-me, pois o arquivo de chave privada estava definido como 600
e pertencente ao meu próprio usuário. Minha culpa. Desculpas para todos: - (
Eu sei como fazer com que um usuário faça ssh em outra caixa com uma chave:
ssh -l targetuser -i path/to/key targethost
Mas e os usuários que não são da conta, como apache
? Como esse usuário não possui um diretório inicial no qual possa gravar um diretório .ssh
, a coisa toda continua falhando:
$ sudo -u apache ssh -o StrictHostKeyChecking=no -l targetuser -i path/to/key targethost
Could not create directory '/var/www/.ssh'.
Warning: Permanently added '<hostname>' (RSA) to the list of known hosts.
Permission denied (publickey).
Eu tentei variações usando -o UserKnownHostsFile=/dev/null
e definindo $HOME
para /dev/null
e nenhuma delas fez o truque. Eu entendo que sudo
provavelmente poderia consertar isso para mim, mas estou tentando evitar a necessidade de uma configuração manual do servidor, já que esse código será implantado em vários ambientes diferentes.
Alguma idéia?
Veja alguns exemplos do que tentei que não funcionam:
$ sudo -u apache export HOME=path/to/apache/writable/dir/ ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=path/to/apache/writable/dir/.ssh/known_hosts -l deploy -i path/to/key targethost
$ sudo -u apache ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=path/to/apache/writable/dir/.ssh/known_hosts -l deploy -i path/to/key targethost
$ sudo -u apache ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -l deploy -i path/to/key targethost
Eventualmente, usarei esta solução para executar o rsync como o apache
user.
Basta criar /var/www/.ssh/ e dar permissão de gravação para o Apache ou alterar o $ HOME do Apache para um diretório onde ele possa escrever.
que tal adicionar o seguinte a /etc/sudoers
someuser ALL = (apache) NOPASSWD: /usr/bin/rsync [options]
que permitirá que algum usuário execute sudo -u apache /usr/bin/rsync [options]
sem uma senha (conveniente para o script ... simplesmente insira explicitamente as opções de rsync, para que elas não possam fazer nada / mas / isso).