물론 그 이유는 다양 할 수 있습니다.
가장 확실한 대답은 어떤 이유로 든 원격 시스템에 의해 인증 될 수 없다는 것입니다. 그러나 원격 시스템에서 디렉토리 권한을 출력하고 있기 때문에 어떤 방법 으로든 ssh가 아닌 액세스 권한이 있다고 가정합니다.
따라서 가장 먼저해야 할 일은 머신에 ssh하고 실제로 시도 할 수있는 해당 위치에 실제로 쓸 수 있는지 확인하는 것입니다.
ssh root@remote_host
cd /var/www/html/test/
touch scratch
빈 파일 스크래치가 보이면 쓸 수 있음을 알 수 있습니다.
시스템에 올바르게 액세스 할 수 있지만 위의 방법으로 작동하지 않는다고 가정하면 실제로 디렉토리에 대한 쓰기 권한이 없을 수도 있습니다. 예를 들어, 원격 시스템의 디렉토리가 특정 유형의 마운트 된 파일 시스템 내에있는 경우 (예 : NTFS (신뢰할 수있는 UNIX 유형 모드를 제공하지 않음)) 커널이 디렉토리를 읽기 전용으로 설정 한 경우 쓰기 권한을 부여하기 위해 퓨즈를 통해 마운트되지 않았습니다. 로컬 설정을보다 신중하게 확인해야하지만, 새로 설정하지 않은 경우 (또는 그렇게 설계되지 않은 경우) 매우 특이한 설정입니다.
여기에서 시스템을 디버깅하는 것은 어려울 것이므로 다른 방법을 시도해 보겠습니다. ssh를 통해 시스템에 액세스하고 시스템 내에서 파일을 쓸 수 있다면 로컬 컴퓨터가 방화벽 뒤에 있지 않은 경우 반대 방향으로 수행하는 것입니다.
다른 터미널로 이동하지 않고도 ssh 한 컴퓨터의 IP를 쉽게 찾을 수 있습니다. 단순성을 위해 환경 변수로 만들어 봅시다.
export IP="`echo $SSH_CLIENT | awk '{print $1}'`"
~ / .bashrc와 같이 일반적으로이 줄을 포함시킵니다.
어쨌든
scp user@$IP:/var/www/html/file.php /var/www/html/test/
물론 로컬 컴퓨터에서 이러한 업데이트를 자동으로 수행하는 프로그램을 실행하려는 경우 아직 문제가 해결되지 않습니다! SSH를 통해 명령을 호출하여이를 해결할 수있는 방법이 있습니다 (따라서 반 직관적으로 보이는 ssh를 통해 scp를 호출합니다). 그러나 완전히 자동화 되려면 ssh 키를 설정하고 키의 비밀번호를 설정하지 않아야합니다. 이것은 머신에 대한 루트 액세스에 권장되는 것이 아니며 scp를 차단하는 원격 머신의 ssh를 사용하여 디버깅해야합니다.