sudo를 통해 ssh를 통해 스크립트 파일 실행

sudo를 통해 ssh를 통해 스크립트 파일 실행

다음 작업을 수행할 수 있는 사용자로 원격 시스템에 로그인할 수 있습니다 sudo su -. 루트로 로그인할 수 없습니다.

원격 컴퓨터에서 실행하려는 스크립트를 로컬로 가지고 있습니다. 또한 스크립트는 다른 스크립트를 통해 그곳으로 전송됩니다.

나는 무엇을 해야할지 모르겠습니다. 여기에 많은 질문과 답변을 게시했지만 성공하지 못했습니다. 내가 얻은 가장 가까운 것 :

COMMAND_SSH="sudo -i <<\'EOF\'"`cat ./unifyServiceNode.sh`"\\nEOF\\n" ;;
...
while read HOST; do
  echo -e "\n\n======== $USER_@$HOST <-- $COMMAND_SSH =================\n\n";
  ssh -n -tt centos@$HOST "'$COMMAND_SSH'";
done < hosts.txt

마지막으로 다음과 같은 출력을 얻었습니다.

======== [email protected] <-- sudo -i <<\'EOF\'
##
##  Creates a few links and scripts to unify the nodes maintainance.
##

  BB="/bb"
  NAME="bpds-api"
  NAME2="bpds-"

  mkdir -p $BB
  ln -s /opt/$NAME/logs/*.log $BB/log
  ln -s /opt/$NAME/conf/api/$NAME.yml $BB/conf.yml || ln -s /opt/$NAME/conf/api/$NAME2.yml $BB/conf.yml
  echo "systemctl \${1:-restart} "${@:2}" $NAME" > $BB/Sys
  echo "tail -\${1:-500f} $BB/log" > $BB/Tail
  echo "nano $BB/conf.yml" > $BB/Conf
  chmod a+x $BB/Sys $BB/Tail $BB/Conf
  echo "export PATH=\$PATH:$BB" >> ~/.bashrc
EOF
 =====================================


bash: sudo -i <<\EOF': command not found
bash: line 14: /bb/Sys: Permission denied
bash: line 15: /bb/Tail: Permission denied
bash: line 16: /bb/Conf: Permission denied
chmod: changing permissions of ‘/bb/Sys’: Operation not permitted
chmod: changing permissions of ‘/bb/Tail’: Operation not permitted
chmod: changing permissions of ‘/bb/Conf’: Operation not permitted
bash: -c: line 18: unexpected EOF while looking for matching `''
bash: -c: line 19: syntax error: unexpected end of file
Connection to somehost.com closed.

이는 개별 명령을 보기 때문에 "가장 가까운" 것이지만 sudo첫 번째 줄이 <<EOF올바르게 이스케이프 처리되지 않았기 때문에 그 아래에는 없습니다.

sudo**over 아래에서 임의의 스크립트를 어떻게 실행해야 하나요 ssh? "

답변1

포스팅하고 나서 금방 알아냈어요.

COMMAND_SSH="sudo -i <<'EOF'"`cat ./unifyServiceNode.sh``echo -e '\nEOF'` ;;

ssh -n -tt centos@$HOST "$COMMAND_SSH"; ## -n prevents reading the input. -tt forces TTY.

SSH 명령 주변의 추가 s가 '문제인 것 같습니다. 또한 echo.

하지만 이것이 단지 행운의 해킹인지 아니면 올바른 접근 방식인지는 확실하지 않습니다. 솔직히 말해서 나는 Bash 인용문 리뷰에 완전히 빠졌습니다. :)

답변2

현재 접근 방식은 매우 복잡하여 사용하기 어렵습니다.
이는 다음과 같이 단순화될 수 있습니다.

ssh -i $AWS_KEY centos@$HOST sudo sh < ./unifyServiceNode.sh

답변3

실행해야 할 명령을 스크립트에 넣고 이를 사용하여 스크립트를 호스트로 전송 scp하고 실행합니다 ssh.

또는 이 문서를 적절한 셸에 제공하세요.

ssh server sh <<'END_SCRIPT'
script code
goes here
END_SCRIPT

또는 여러 호스트를 원격으로 구성하려면 Ansible 또는 유사한 시스템을 사용하십시오.

일반적으로 명령을 변수에 넣는 것을 원하지 않습니다.

답변4

일반 텍스트 비밀번호를 저장하려는 경우(물론 나쁜 생각임) , 및 를 결합 sshpass -p "my_ssh_password"하면 ssh << HEREDOC됩니다 echo "my_sudo_password" | sudo -S my_cmd.

예:

sshpass -p "my_ssh_password" ssh my_user@my_ip << 'ENDSSH'
echo "my_sudo_password" | sudo -S my_sudo_command1
echo "my_sudo_password" | sudo -S my_sudo_command2
echo "my_sudo_password" | sudo -S my_sudo_script
ENDSSH

관련 정보