내 스크립트가 코딩된 방식으로는 루트를 통해 서버에 직접 연결할 수 없습니다. 이 코드는 기본적으로 서버에서 내 컴퓨터로 파일을 복사하고 작동하지만 루트만 액세스할 수 있기 때문에 많은 파일에 액세스할 수 없습니다. 사용자로 서버에 연결한 다음 루트로 전환하여 해당 파일을 복사하려면 어떻게 해야 합니까?
변경하고 싶은 코드:
sshpass -p "password" scp -q -r [email protected]:some_directory copy_it/here/
즉, 원격 서버에서 루트로만 접근할 수 있는 파일을 원격으로 복사하고 싶지만 루트로 ssh/scp를 통해 직접 원격 서버에 접근할 수 있게 하고 싶지는 않습니다.
ssh만 가능하고 sshpass는 불가능합니까?
답변1
사용하시면 좋을 것 같아요열쇠(비밀번호 아님) 자동 원격 로그인.
루트 액세스 권한을 얻으려면 비밀번호가 없는 "su"가 필요하거나 루트 사용자를 사용하여 명령을 실행할 수 있도록 "sudo"를 구성하는 것이 더 좋습니다.
그런 다음 "ssh"(scp 아님)를 사용하여 원격 서버에 로그인하고 명령을 실행할 수 있습니다. 그런 다음 tar/lszrz/whatever를 사용하여 파일을 전송할 수 있습니다.
이와 같이:
ssh remote.server.com sudo tar fc - /path/on/the/remote/server | tar fx -
그러면 /path/on/the/remote/server가 현재 디렉터리에 복사됩니다.
편집하다:사용자가 이 작업을 수행하도록 허용하는 것은 안전하지 않다는 점을 명심하십시오 sudo tar
.
답변2
따라서 접근 방식은 원격으로 명령을 실행하고, sudo를 통해 원격 시스템의 /tmp에 파일을 복사하고, 소유자를 연결된 사용자로 변경한 다음, /tmp에서 원격으로 복사하는 것입니다.
ssh [email protected] "sudo cp -R some_directory /tmp"
ssh [email protected] "sudo chown -R username:username /tmp/some_directory"
scp -q -r [email protected]:/tmp/some_directory copy_it/here/
ssh [email protected] "rm -r /tmp/some_directory"