bash에서 ssh와 sudo를 함께 사용하는 방법은 무엇입니까? 컴퓨터에서 로깅을 검색하기 위해 매우 기본적인

이 특정 시나리오를 설명하는 질문을 찾지 못했습니다.

여러 컴퓨터에서 로깅을 검색하기 위해 매우 기본적인 bash 스크립트를 실행하려고합니다. 스크립트를 로컬로 실행하고 있지만 ssh를 통해 외부 컴퓨터에 액세스하고 해당 컴퓨터에서 권한이있는 사용자에게 sudo를 한 번 실행해야합니다 …

ssh myuser@machine.net
sudo su  - privledged_user
cat logs > file.txt

sh -x로 이것을 실행하면 bash가 ‘ssh’줄에 붙어 있습니다. 그래서 나는 이것을 다음과 같이 수정하려고 시도했다.

ssh myuser@machine.net sudo su - privledged_user cat logs > file.txt

이것은 또한 무기한으로 멈추는 것처럼 보입니다. 이 문제에 대한 더 나은 해결책이 있습니까 ?? 내가 말할 수있는 것에서 sudo su를 사용하는 방법을 보지 못했습니다 …

도움을 주셔서 감사합니다!



답변

현재 환경에서 이것을 달성하는 방법 -t은 다음과 같이 tty 할당을 강제 하는 플래그로 ssh를 실행 하고 그 안에 sudo -u root를 실행하는 것입니다.

ssh -t hostname << EOF
  command1
  sudo -u root command2
  sudo -u otheruser "command3 | command4"
  sudo -u root /bin/bash -c "command5; command6; command7"
  command8 && ( sudo -u otheruser /bin/bash -c "cmd1 ${1}; cmd2 {$2}" ) || echo cmd2 did not work

EOF

암호가 필요하지 않도록 원격 측의 sudoers에 내 계정이 있습니다.

이 예는 bash 또는 서브 쉘 내에서 여러 명령을 실행하는 것을 포함하여 단일 ssh 세션 내에서이를 수행하는 다양한 방법을 보여줍니다. 또한 위의 코드를 실행 가능 스크립트에 넣으면 명령 줄 인수 ($ 1 및 $ 2)를 ssh에 전달하면 확장되어 원격에서 참조됩니다.


답변

sudo가 암호를 묻는 것을 원하지 않거나 막을 수없는 경우 간단한 방법은 로컬 에서 암호를 읽고 로컬 변수에 저장하는 것입니다.

read -p 'Password: ' -s password

ssh -t user@1.2.3.4 <<EOF
  echo "$password" | sudo -S whoami
EOF

답변

sudo가 암호없는 명령을 허용하도록 구성된 경우 원하는 작업을 수행해야합니다.

ssh myuser@machine.net "sudo su - privileged_user -c 'cat logs'" > file.txt

또는

ssh myuser@machine.net "sudo su - privileged_user -c 'cat logs > file.txt'"

file.txt로컬 또는 원격으로 파일을 만들지 여부에 따라

그렇지 않으면 다음은 원격 사용자의 비밀번호를 sudo다음 으로 전달하는 방법입니다 .

echo mrhyner_password | \
  ssh mrhyner@test-server.net \
  "sudo -S su - adcentrl -c 'egrep ERROR\|WARN /home/adcentrl/cronjobs/logs/*/*'"