Precisa de scp com www-data sem necessidade de senha

Precisa de scp com www-data sem necessidade de senha

Eu tenho uma DMZ com um servidor web rodando Ubuntu 11.04 e um servidor de aplicativos rodando Ubuntu 11.10. Eu configurei tudo para poder fazer scp do servidor web para o servidor de aplicativos executando

ssh-keygen
ssh-copy-id [email protected]

onde 192.168.1.6 é o endereço IP local do aplicativo. server e peter é o nome da minha conta de login. No entanto, gostaria de copiar os arquivos em resposta a uma chamada através de um site baseado em LAMP usando um comando em um arquivo PHP. Meu problema é que o "usuário" dos meus aplicativos da web é www-data, que não é um usuário real, portanto não posso criar chaves para ele.

Eu tentei o procedimento descritoaqui. Eu então fiz

su
su www-data

no servidor web (acho que o "servidor" de acordo com a discussão de Berkeley). Infelizmente, ainda me pedem a senha quando tento acessar o servidor/cliente do aplicativo.

tentei

scp -vv /var/www/Src/*.txt 192.168.1.6:/var/www/Dest

A saída foi praticamente a mesma de quando eu (com sucesso) scp da conta Peter. No entanto, estas últimas linhas são diferentes.

debug1: Authentications that can continue: publickey,password
debug1: Offering DSA public key: /var/www/.ssh/id_dsa
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug1: Offering ECDSA public key: /var/www/.ssh/id_ecdsa
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug2: we did not send a packet, disable method
debug1: Next authentication method: password
[email protected]'s password: 

Ficaria muito grato se alguém pudesse me dizer ou me ajudar a descobrir onde está o problema.

Responder1

Depois de ler o link que você forneceu: certifique-se de usar chaves_autorizadas, não chaves_autorizadas2. Este último está obsoleto há anos e não funcionou em algumas versões do OpenSSH.

A maneira mais fácil de diagnosticar isso é com uma instância de depuração do servidor SSH. No servidor, execute:

# /usr/sbin/sshd -ddep 2222

... que executa o daemon SSH no modo de depuração, escutando na porta 2222. Refaça seu comando scp com:

$ scp -o port=2222 ...

... e veja o que o servidor diz.

Para as preocupações de segurança de John: se você decidir continuar usando a conta www-data, poderá limitar sua chave a apenas determinadas ações (como transferir determinados arquivos) usando uma opção de "comando forçado" emauthorized_keys.

Responder2

Você disse que tentou

    scp -vv /var/www/Src/*.txt 192.168.1.6:/var/www/Dest

Mas a chave que você gostaria de usar não aparece em lugar nenhum. Tentar:

    scp -vvv -i /path/to/private/key /var/www/Src/*.txt 192.168.1.6:/var/www/Dest

De qualquer forma, você deve certificar-se de que sua conexão esteja restrita a este comando específico. Não tenho certeza se o SCP fornece maneiras de restringir comandos (como comando forçado com SSH). Em vez disso, eu usaria SSH sobre rsync para garantir que apenas um comando rsync fosse iniciado. Isso fornece basicamente o mesmo serviço que o scp, mas sua chave pode ser marcada com um comando force que pode ser mais seguro.

Responder3

Usei o inotify para implementar o método sugerido por John Gardeniers. Foi fácil e agora funciona bem. Acabei de escrever um aplicativo C++ que executa o scp quando um arquivo no diretório é modificado, como pode ser feito a partir do código PHP. Funciona bem.

Obrigado,
Pedro

informação relacionada