sftp 명령을 이용하여 Server와 PC(Client) 간에 파일을 전송하는 방식을 주로 사용하지만,
가끔 Linux 서버에 SFTP 서버 데몬이 구동되어 있지 않거나 ssh 터미널만 접속한 상태에서 즉시 파일을 전송할 때는 rz, sz 같은 zmodem을 사용하면 편하다.
(1990년 대, 하이텔 또는 나우누리 또는 천리안 같은 PC 통신을 사용한 사람이라면 대충 zmodem에 대한 느낌이 팍~ 올거다)
Mac OS에 rz sz 모뎀 프로그램 설치하기
##
## zmodel(즉, rz와 sz)를 사용하기 위해서는 xcode 개발자 도구가 필요하다.
## 따라서 아래와 같이 xcode를 설치한다.
##
$ xcode-select --install
xcode-select: note: install requested for command line developer tools
##
## lrzsz 프로그램 설치하기
##
$ brew install lrzsz
##
## rz, sz 명령을 수행했을 때, iTerm2를 Triggering할 수 있도록
## Shell Script를 만든다.
## ( 이미 다른 사람이 친절하게 iTerm2 Triggering 스크립트를 만들었다.
## 그냥 아래 설명처럼 Script 파일을 복사해서 사용하면 된다. )
##
$ git clone https://github.com/robberphex/iTerm2-zmodem.git
$ sudo cp iterm2-*-zmodem.sh /usr/local/bin/
Iterm2 터미널 Trigger 기능 설정
아래 화면처럼 Triggers 설정 항목에 rz, sz 명령에 관한 Trigger 정보를 추가한다.
위 과정까지 따라했다면, 설치와 설정 작업은 끝이다.
실제로 파일을 전송해보자 !!!
Linux 서버에 SSH 접속해서 아래처럼 명령을 수행해보자.
그러면 자동으로 Finder 창이 열릴 것이고, test-img.jpg를 저장할 폴더를 선택해준다.
그러면 알아서 파일이 내 PC(즉, 맥북)에 전송될 것이다.
Troubleshooting (문제, 오동작 해결하기)
위 설명을 따라서 설치하면 대부분 rz, sz 명령은 잘 동작한다.
그런데 만약 rz, sz 명령을 수행했는데, 제대로 파일이 전송되지 않는다면 아래와 같이 rz, sz 명령의 경로가 올바른지 한번 확인하고 명령의 경로만 잘 설명해주면 된다.
$ sudo cat /usr/local/bin/iterm2-recv-zmodem.sh
#!/bin/bash
# Author: Matt Mastracci (matthew@mastracci.com)
# AppleScript from http://stackoverflow.com/questions/4309087/cancel-button-on-osascript-in-a-bash-script
# licensed under cc-wiki with attribution required
# Remainder of script public domain
osascript -e 'tell application "iTerm2" to version' > /dev/null 2>&1 && NAME=iTerm2 || NAME=iTerm
if [[ $NAME = "iTerm" ]]; then
FILE=$(osascript -e 'tell application "iTerm" to activate' -e 'tell application "iTerm" to set thefile to choose folder with prompt "Choose a folder to place received files in"' -e "do shell script (\"echo \"&(quoted form of POSIX path of thefile as Unicode text)&\"\")")
else
FILE=$(osascript -e 'tell application "iTerm2" to activate' -e 'tell application "iTerm2" to set thefile to choose folder with prompt "Choose a folder to place received files in"' -e "do shell script (\"echo \"&(quoted form of POSIX path of thefile as Unicode text)&\"\")")
fi
if [[ $FILE = "" ]]; then
echo Cancelled.
# Send ZModem cancel
echo -e \\x18\\x18\\x18\\x18\\x18
sleep 1
echo
echo \# Cancelled transfer
else
cd "$FILE"
##
## NOTE : 본인 Mac PC에 설치한 rz, sz 명령의 위치가 /usr/local/bin 인지 /opt/homebrew/bin 인지
## 확인하고, 아래 예제처럼 올바르게 경로를 설정해주어야 한다.
##
# /usr/local/bin/rz --rename --escape --binary --bufsize 4096
/opt/homebrew/bin/rz --rename --escape --binary --bufsize 4096
sleep 1
echo
echo
echo \# Sent \-\> $FILE
fi