SSH를 통해 원격 txt 파일을 복사하고 싶지만 루트 액세스 권한은 없습니다.

SSH를 통해 원격 txt 파일을 복사하고 싶지만 루트 액세스 권한은 없습니다.

내 호스트를 원격으로 복사하고 싶지만 /etc/hosts작동하지 않습니다. 루트 SSH 액세스가 작업을 더 쉽게 만든다는 것을 알고 있지만 IMHO 루트 SSH 액세스는 약간 위험합니다.

 cat /etc/hosts|ssh samba2 "sudo su -c "sh -c cat > /etc/hosts""

내 사용자에게 액세스 권한이 거부되어 명령이 실패합니다 sudo.

해결책이 있나요?

답변1

cat /etc/hosts | ssh samba2 'sudo tee /etc/hosts > /dev/null'

프로그램은 tee루트로 실행되므로 /etc/hosts표준 입력을 사용하여 재정의할 수 있습니다. tee's우리가 그것을 볼 필요가 없거나 보고 싶지 않기 때문에 stdout을 버리 십시오 .

그리고 특이한 참조를 위해 난제를 뛰어넘을 필요가 없습니다.

>>이는 덮어쓰는 대신 추가( 에서와 같이)해야 하는 경우에 작동합니다 tee -a.

답변2

ssh -tt samba "sudo bash -s" <<EOF
    echo "$(cat /etc/hosts)" >/etc/hosts
    exit 0
EOF

그러면 세션이 열리고 heredoc가 스크립트로 전달된 상승된 bash가 실행됩니다. -tt 매개변수는 ssh가 의사 tty를 할당하기 위한 것입니다. 그렇지 않으면 sudo가 불평합니다. heredoc에서 명령 대체는 로컬로 수행되고 전체 텍스트가 수행됩니다. 멀리서 들려오는 메아리를 얻을 것이다.

편집: 명령 대체에 대해 인용합니다. 편집 2: 스크립트에 종료를 추가했습니다. 그렇지 않으면 bash는 계속해서 명령을 기다립니다.

답변3

지정된 리디렉션은 작동하지 않지만 다음 두 단계로 수행할 수 있습니다.

  • scp를 사용하여 파일 복사

  • sudo를 사용하여 원격 컴퓨터의 파일 업데이트

예를 들어

scp -p /etc/hosts samba2:
ssh -t samba2 sudo cp -f -v -p ~/hosts /etc/hosts

파일 복사 권한을 유지하려고 시도합니다. 사용 중인 시스템에 따라 이 -p옵션은 파일 소유권을 보존하려고 시도할 수도 있습니다. 이 경우에는 다음을 사용하십시오.

--preserve=mode,timestamps

스크립트에 문제가 있는 경우(복원하지 않고 파일을 지울 수 있음) 교체는 /etc/hosts최선의 선택이 아닙니다./etc/hosts

관련 정보