내 호스트를 원격으로 복사하고 싶지만 /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