scp로 루트 액세스가 필요한 파일을 어떻게 복사합니까? WinSCP를 사용하여 파일을 복사하는 경우

SSH를 사용하여 연결하는 Ubuntu 서버가 있습니다.

내 컴퓨터 /var/www/에서 서버 로 파일을 업로드해야 합니다. 파일 /var/www/은의 소유입니다 root.

PuTTY를 사용하여 로그인 한 후에서 sudo su파일을 수정할 수 있으려면 먼저 비밀번호 를 입력해야합니다 /var/www/.

그러나 WinSCP를 사용하여 파일을 복사하는 경우 /var/www/연결하는 사용자에게 파일에 대한 권한이 없으며 ssh 세션의 경우와 같이 /var/www/말할 수 없기 때문에에서 파일 작성 / 수정 파일을 작성할 수 없습니다. sudo su.

내가 어떻게 대처할 수 있는지 아십니까?

로컬 컴퓨터에서 작업하는 gksudo nautilus경우 전화를 걸지만이 경우 컴퓨터에 대한 터미널 액세스 권한 만 있습니다.



답변

당신이 옳습니다, sudo작업 할 때가 없습니다 scp. 해결 방법은 scp사용자에게 파일 작성 권한이있는 디렉토리에 파일을 업로드 한 다음 ssh를 통해 로그인하여 sudo파일을 최종 대상으로 이동 / 복사 하는 데 사용 하는 것입니다.

scp -r folder/ user@server.tld:/some/folder/you/dont/need/sudo
ssh user@server.tld
 $ sudo mv /some/folder /some/folder/requiring/perms
# YOU MAY NEED TO CHANGE THE OWNER like:
# sudo chown -R user:user folder

다른 해결책은 파일을 업로드하는 디렉토리의 권한 / 소유권을 변경하여 권한이없는 사용자가 해당 디렉토리에 쓸 수 있도록하는 것입니다.

일반적으로 root계정 에서 작업 하는 것은 규칙이 아닌 예외가되어야합니다. 질문을 표현하는 방식에 따라 약간의 학대를 당하고 있다고 생각할 수 있습니다. 이로 인해 권한 문제가 생길 수 있습니다. 자신의 파일에 액세스 할 수있는 최고 관리자 권한

기술적으로 원격 로그인을 직접 허용하도록 Ubuntu를 구성 할 수 root있지만이 기능은 어떤 이유로 비활성화되어 있으므로 그렇게하지 않도록 강력히 조언합니다.


답변

또 다른 방법은 scp 대신 tar + ssh를 사용하여 복사하는 것입니다.

tar -c -C ./my/local/dir \
  | ssh dimitris@myserver.com "sudo tar -x --no-same-owner -C /var/www"


답변

빠른 길

서버에서 로컬 시스템으로 :

ssh user@server "sudo cat /etc/dir/file" > /home/user/file

로컬 머신에서 서버로 :

cat /home/user/file | ssh user@server "sudo tee -a /etc/dir/file"


답변

ansible이것을 달성 하기 위해 사용할 수도 있습니다 .

ansible의 copy모듈을 사용하여 원격 호스트에 복사하십시오 .

ansible -i HOST, -b -m copy -a "src=SRC_FILEPATH dest=DEST_FILEPATH" all

ansible의 fetch모듈을 사용하여 원격 호스트에서 가져 오기 :

ansible -i HOST, -b -m fetch -a "src=SRC_FILEPATH dest=DEST_FILEPATH flat=yes" all

노트:

  • -i HOST,구문 의 쉼표 는 오타가 아닙니다. 인벤토리 파일이 없어도 ansible을 사용하는 방법입니다.
  • -b서버의 조치가 루트로 수행되도록합니다. -b로 확장되고 --become기본값 --become-user은 root이며 기본값 --become-method은 sudo입니다.
  • flat=yes파일 복사 하고 파일로 이어지는 전체 원격 경로를 복사하지 않습니다
  • 이러한 사용 가능한 모듈에서는 파일 경로에 와일드 카드를 사용할 수 없습니다.
  • 디렉토리를 복사하면 됩니다 에 의해 지원 copy하지만, 모듈 하지 바이 fetch모듈.

이 질문에 대한 특정 호출

다음은 분배 될 파일을 포함하는 로컬 호스트의 디렉토리가 sourcedir이고 원격 대상의 호스트 이름이 hostname다음 과 같다고 가정 할 때 구체적이고 완전하게 지정된 예입니다 .

cd sourcedir && \
ansible \
   --inventory-file hostname, \
   --become \
   --become-method sudo \
   --become-user root \
   --module-name copy \
   --args "src=. dest=/var/www/" \
   all

간결한 호출로 :

cd sourcedir && \
ansible -i hostname, -b -m copy -a "src=. dest=/var/www/" all

추신 : 나는 “이 멋진 도구를 설치하십시오”라는 말은 일종의 청각 장애라는 것을 알고 있습니다. 그러나 원격 서버를 관리하는 데 매우 유용한 것으로 나타 났으 므로 설치하면 파일 배포 이외의 다른 이점이 있습니다.


답변

을 실행 sudo su하면 생성 한 모든 파일은 root가 소유하지만 기본적으로 ssh 또는 scp를 사용하여 root로 직접 로그인 할 수는 없습니다. scp와 함께 sudo를 사용할 수도 없으므로 파일을 사용할 수 없습니다. 파일 소유권을 주장하여이 문제를 해결하십시오.

사용자 이름이 dimitri라고 가정하면이 명령을 사용할 수 있습니다.

sudo chown -R dimitri:dimitri /home/dimitri

그때부터 다른 답변에서 언급했듯이 “우분투”방법은 루트 로그인이 아닌 sudo를 사용하는 것입니다. 보안상의 이점이있는 유용한 패러다임입니다.


답변

가장 좋은 방법은 사용하는 것입니다 수 있음 rsync( Cygwin에서 / cwRsync SSH를 통해 윈도우에서)을?

예를 들어, 소유자가있는 파일을 업로드하려면 다음을 수행하십시오 www-data.

rsync -a --rsync-path="sudo -u www-data rsync" path_to_local_data/ login@srv01.example.com:/var/www

귀하의 경우 루트 권한이 필요한 경우 명령은 다음과 같습니다.

rsync -a --rsync-path="sudo rsync" path_to_local_data/ login@srv01.example.com:/var/www

sudo를 사용하여 원격 서버로 scp를 참조하십시오 .


답변

PuTTY 대신 OpenSSH 도구를 사용하는 경우로 scp서버 에서 파일 전송을 시작하여이를 수행 할 수 있습니다 sudo. sshd로컬 머신에서 데몬이 실행 중인지 확인하십시오 . 으로 ssh -R당신은 서버를 컴퓨터에 연락 할 수있는 방법을 제공 할 수 있습니다.

컴퓨터에서 :

ssh -R 11111:localhost:22 REMOTE_USERNAME@SERVERNAME

서버에서 로그인하는 것 외에도 서버의 포트 11111에서 이루어진 모든 연결을 시스템의 포트 22로 전달합니다. sshd수신중인 포트 입니다.

서버에서 다음과 같이 파일 전송을 시작하십시오.

cd /var/www/
sudo scp -P 11111 -r LOCAL_USERNAME@localhost:FOLDERNAME .