Bash 스크립트가 있고 다음 명령을 실행하고 싶습니다.
- 아파치 서비스 다운로드
sudo apt-get install apache2 -y > /dev/null 2>&1
- MySQL 서비스 다운로드
sudo apt install mysql-server -y > /dev/null 2>&1
하지만 이 Bash 스크립트는 이 두 명령을 실행할 서버 외부에 있습니다.
예를 들어 Bash 스크립트 파일은 서버 192.168.10.2에 있고 원격 서버 IP는 172.143.20.4입니다.
스크립트는 ssh를 통해(비밀번호를 묻지 않고) 자동으로 서버에 연결하지만 sshpass를 사용하지 않습니다(Bash 스크립트 파일이 배포되는 서버에서는 명령을 사용할 수 없기 때문입니다).
메시지를 표시하지 않고 로그인하기 위해 여러 가지 방법을 시도했습니다(모두 실패).
echo "myHardPassword" | ssh -t -o StrictHostKeyChecking=no [email protected]
ssh -t -o StrictHostKeyChecking=no [email protected] "echo myHardPassword"
어떻게 해야 합니까(자동으로 로그인하여 이 두 명령을 실행합니까?)
답변1
업데이트: 질문을 다시 읽은 후 중간에 서버를 두는 부분을 놓친 것이 분명합니다. 설치 스크립트를 내 컴퓨터로 이동하고 ProxyJump 매개변수를 사용하여 적용하겠습니다. 이를 반영하여 답변을 업데이트했습니다. 필요한 것은 공개 키를 서버에 추가하는 것뿐입니다.
저는 개인적으로 한 가지만 실행하는 것을 좋아하므로 필요할 때마다 모든 것을 스크립트에 넣고 해당 스크립트를 실행합니다. 따라서 스크립트가 있을 수 있습니다 ~/git/server-provisioning/script-to-upload.sh
.
#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'
apt-get install -y apache2
apt-get install -y mysql-server
다음과 같은 스크립트를 가질 수 있습니다 ~/git/server-provisioning/setup-remote-server.sh
.
declare scriptFile="~/git/server-provisioning/script-to-upload.sh"
[ -x "$scriptFile ] || chmod 700 "$scriptFile"
scp -o StrictHostKeyChecking=no "scriptFile" "$1":/tmp/
echo "myHardPassword" | \
ssh "$1" -tt \
-o StrictHostKeyChecking=no \
"sudo bash /tmp/script-to-upload.sh > /dev/null 2>&1"
호스트를 다음 위치에 넣으세요 ~/.ssh/config
.
Host server1
Hostname 172.143.20.4
ProxyJump 192.168.0.2
User root
~/git/server-provisioning/setup-remote-server.sh
실행 가능 하게 하다
chmod 700 ~/git/server-provisioning/setup-remote-server.sh
설정 스크립트를 실행합니다.
./git/server-provisioning/setup-remote-server.sh 서버1