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 .