![sshpass의 여러 명령 [닫기]](https://linux55.com/image/137909/sshpass%EC%9D%98%20%EC%97%AC%EB%9F%AC%20%EB%AA%85%EB%A0%B9%20%5B%EB%8B%AB%EA%B8%B0%5D.png)
에서 여러 명령을 사용할 수 있는 방법이 있나요 sshpass
? 다양한 조합을 사용해 보았지만 오류가 발생합니다.
$ sudo sshpass -p $password ssh -t -oStrictHostKeyChecking=no $username@$ipaddress << EOF
command_one
command_two
command_three
EOF
정확하고 정확한 명령은 무엇이며 가능하다면 예를 들어주세요.
답변1
귀하의 솔루션은 sshpass 유무에 관계없이 작동합니다. 작동하지 않으면 다른 문제가 있을 수 있습니다.
또한 항상 각 변수를 인용해야 합니다.
또한 stricthostkeychecking을 쉽게 비활성화해서는 안 됩니다. 호스트 키가 자주 변경되면 서버가 손상되었을 수 있습니다.
그러나 목표를 달성하는 몇 가지 방법은 다음과 같습니다.
명령 구분 기호 사용( ;
, &&
, ||
)
sshpass -p "$password" ssh -t -oStrictHostKeyChecking=no "$username@ipaddress" 'command_one; command_two; command_three'
here-doc(원격 호스트에서 변수/명령 대체를 확장하려면 작은따옴표 EOF)를 사용하십시오.
sshpass -p "$password" ssh -t -oStrictHostKeyChecking=no "$username@ipaddress" <<EOF
command_one
command_two
command_three
EOF
별도의 파일을 사용하십시오.
파일.sh
command_one
command_two
command_three
그런 다음 다음과 같이 실행하십시오.
cat file.sh | sshpass -p "$password" ssh -t -oStrictHostKeyChecking=no "$username@ipaddress"
SSH 터널을 사용하십시오.
sshpass -p "$password" ssh -f -L 3306:localhost:3306 "$username@ipaddress" sleep 300 # This will open a tunnel to the remote host and hold it open for 5 minutes
ssh -T "$username@ipaddress" 'command_one'
ssh -T "$username@ipaddress" 'command_two'
ssh -T "$username@ipaddress" 'command_three'
답변2
이 시도:
$ sudo sshpass -p $password ssh -t -oStrictHostKeyChecking=no $username@$ipaddress << EOF
command_one;
command_two;
command_three;
EOF
나는 위의 작업을 수행했고 훌륭하게 작동했습니다.