Linux

[Linux] sshpass - 문자열을 원격 서버 파일로 전달하기

비번변경 2023. 11. 22. 19:05

개요

Bash 쉘 스크립트에서 변수에 저장되어 있는 문자열을 sshpass를 이용해 원격 서버에 저장하려고 한다.

방법을 적어둔다.

 

 

시도

처음에는 다음과 같은 명령어를 사용했다.

#!/bin/sh
SCRIPT='전달할 문자열'
SSH_PASSWD='SSH 비밀번호'
SSH_USERNAME='SSH 계정명'
IP='원격지 IP'
PATH='파일경로'
FILE_NAME='파일명'

sshpass -p $SSH_PASSWD ssh -p $SSH_PORT -o StrictHostKeyChecking=no -t $SSH_USERNAME@IP 'echo $SCRIPT > $PATH/$FILE_NAME'

하지만 실행했을 때 의도한 대로 동작하지 않고, 원격지 서버에는 빈 파일만 생성되어 있었다.

 

 

해결

문자열을 원격지 서버에 디렉터리에 파일로 저장할 때는 문자열 표준 출력을 파이프로 전달해야 한다.

#!/bin/sh
SCRIPT='전달할 문자열'
SSH_PASSWD='SSH 비밀번호'
SSH_USERNAME='SSH 계정명'
IP='원격지 IP'
PATH='파일경로'
FILE_NAME='파일명'

echo '$SCRIPT' | sshpass -p $SSH_PASSWD ssh -p $SSH_PORT -o StrictHostKeyChecking=no -t $SSH_USERNAME@$IP 'cat > $PATH/$FILE_NAME'

 

 

StrictHostkeyChecking

SSH를 이용해 원격 서버에 접근할 때 해당 서버에 대한 인증을 위해 로컬에 저장해 둔 키와 서버의 키를 비교한다. 이 과정을 통해 중간자 공격 등을 예방할 수 있는데, StrictHostkeyChecking=no로 설정하면 접속 시도 시 해당 작업을 수행하지 않는다.

 

 

참고 문서

sshpass append string to a remote file