다음 작업을 수행할 수 있는 사용자로 원격 시스템에 로그인할 수 있습니다 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