Precisa scp com www-data sem a necessidade de senha

2

Eu tenho um DMZ com um servidor web rodando o Ubuntu 11.04 e um servidor de aplicativos rodando o Ubuntu 11.10. Eu configurei as coisas para que eu possa scp do servidor web para o servidor de aplicativos executando

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

em que 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 por meio de um site baseado em LAMP usando um comando em um arquivo PHP. Meu problema é que o "usuário" dos meus aplicativos da web é o www-data, que não é um usuário real, por isso não posso criar chaves para ele.

Eu tentei o procedimento descrito aqui . Eu então fiz

su
su www-data

no servidor web (eu acho que o "servidor" para a discussão de Berkeley). Infelizmente, ainda me perguntam a senha quando tento scp para o servidor de aplicativos / cliente.

Eu 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, essas ú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: 

Eu ficaria muito grato se alguém pudesse me dizer, ou me ajudar a encontrar, onde está o problema.

    
por OtagoHarbour 26.08.2012 / 00:08

3 respostas

0

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

Obrigado,
Peter

    
por 17.09.2012 / 00:02
0

Depois de ler o link fornecido, certifique-se de usar authorized_keys, not authorized_keys2. Este último foi preterido durante anos e não funcionou em todas as 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 a transferência de determinados arquivos) usando uma opção "comando forçado" em authorized_keys.

    
por 26.08.2012 / 07:59
0

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 nenhum lugar. Experimente:

    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 está restrita a este comando específico. Não tenho certeza se o SCP fornece maneiras de restringir o comando (como o comando forçado com o SSH). Em vez disso, eu usaria o rsync do SSH para garantir que apenas um comando rsync fosse lançado. Isso fornece basicamente o mesmo serviço que o scp, mas sua chave pode ser marcada com um comando de força que pode ser mais seguro.

    
por 26.08.2012 / 18:21