비밀번호 없이 www-data가 포함된 scp가 필요합니다.

비밀번호 없이 www-data가 포함된 scp가 필요합니다.

Ubuntu 11.04를 실행하는 웹 서버와 Ubuntu 11.10을 실행하는 응용 프로그램 서버가 있는 DMZ가 있습니다. 다음을 실행하여 웹 서버에서 응용 프로그램 서버로 scp할 수 있도록 설정했습니다.

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

여기서 192.168.1.6은 앱의 로컬 IP 주소입니다. server와 peter는 내 로그인 계정 이름입니다. 그런데 LAMP 기반 웹사이트를 통해 호출에 대한 응답으로 PHP 파일의 명령을 사용하여 파일을 복사하고 싶습니다. 내 문제는 내 웹 응용 프로그램의 "사용자"가 실제 사용자가 아닌 www-data이므로 이에 대한 키를 만들 수 없다는 것입니다.

설명된 절차를 시도해 보았습니다.여기. 그때 내가 그랬어

su
su www-data

웹 서버에서 (Berkeley 토론에 따르면 "서버"라고 생각합니다). 안타깝게도 애플리케이션 서버/클라이언트에 scp를 시도할 때 여전히 비밀번호를 묻는 메시지가 나타납니다.

나는 노력했다

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

출력은 Peter 계정에서 scp를 (성공적으로)했을 때와 거의 동일했습니다. 그러나 마지막 몇 줄은 다릅니다.

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: 

누군가가 나에게 문제가 있는 곳을 알려주거나 찾도록 도와준다면 가장 감사하겠습니다.

답변1

귀하가 제공한 링크를 읽은 후 Authorized_keys2가 아닌 Authorized_keys를 사용해야 합니다. 후자는 수년 동안 더 이상 사용되지 않았으며 일부 OpenSSH 버전에서는 전혀 작동하지 않았습니다.

이를 진단하는 가장 쉬운 방법은 SSH 서버의 디버깅 인스턴스를 사용하는 것입니다. 서버에서 다음을 실행합니다.

# /usr/sbin/sshd -ddep 2222

... 디버그 모드에서 SSH 데몬을 실행하고 포트 2222에서 수신 대기합니다. 다음을 사용하여 scp 명령을 다시 실행하세요.

$ scp -o port=2222 ...

... 그리고 서버가 말하는 것을 확인하세요.

John의 보안 문제에 대해: www-data 계정을 계속 사용하기로 결정한 경우 Authorized_keys의 "강제 명령" 옵션을 사용하여 해당 키를 특정 작업(예: 특정 파일 전송)으로만 제한할 수 있습니다.

답변2

노력했다고 하더군요

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

하지만 사용하려는 키는 어디에도 나타나지 않습니다. 노력하다:

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

어쨌든 연결이 이 특정 명령으로 제한되어 있는지 확인해야 합니다. SCP가 명령을 제한하는 방법(예: SSH를 통한 강제 명령)을 제공하는지 잘 모르겠습니다. 그런 다음 대신 SSH overs rsync를 사용하여 rsync 명령만 실행되는지 확인합니다. 이는 기본적으로 scp와 동일한 서비스를 제공하지만 키에 더 안전할 수 있는 force 명령으로 태그를 지정할 수 있습니다.

답변3

나는 John Gardeniers가 제안한 방법을 구현하기 위해 inotify를 사용했습니다. 쉬웠고 이제는 잘 작동합니다. 방금 PHP 코드에서 수행할 수 있는 것처럼 디렉토리의 파일이 수정될 때 scp를 수행하는 C++ 애플리케이션을 작성했습니다. 잘 작동합니다.

고마워요,
피터

관련 정보