🧭 Intro
저는 메인 개발 환경으로 macOS를 사용하고 있습니다.
서버에 자주 접속하거나 파일을 전송할 일이 많은데, 매번 scp
, sftp
또는 ssh
를 사용하는 건 번거롭더라고요.
그러다 알게 된 게 바로 SSHFS (SSH File System) 입니다.
🔍 SSHFS란?
SSHFS는 SSH 프로토콜을 이용해서 원격 서버의 디렉토리를 로컬 디렉토리처럼 마운트할 수 있게 해주는 도구입니다.
즉, 마치 외장 하드처럼 원격 서버의 /home/username
디렉토리를 내 컴퓨터의 특정 폴더 아래에 붙여서 사용할 수 있게 되는 것이죠.
- 서버 접근이 파일 탐색기 수준으로 쉬워지고
scp
없이도 파일 편집이 가능하며- 개발 중인 프로젝트에서 서버 파일을 로컬처럼 활용할 수 있습니다.
🛠️ SSHFS 마운트를 자동화한 Bash 스크립트
SSHFS 명령어도 길고 반복적인 작업이 많아 불편해서, 저는 서버 리스트를 관리하고 mount/unmount를 쉽게 선택할 수 있는 스크립트를 하나 작성했습니다.
스크립트 파일명: sshfs_manager.sh
개인정보는 예시로 대체했습니다.
#!/opt/homebrew/bin/bash
# ── Color codes ─────────────────────────────
RED="\033[0;31m"
GREEN="\033[0;32m"
YELLOW="\033[0;33m"
BLUE="\033[0;34m"
CYAN="\033[0;36m"
NC="\033[0m" # No Color
# ── SSHFS Server list ───────────────────────
declare -A SERVERS=(
[s43]="user1@192.168.0.43:/home/user1::22"
[s78]="user2@192.168.0.78:/home/user2::22"
[s203]="user2@192.168.0.203:/home/user2::22"
[s50022]="user2@192.168.0.78:/home/user2::50022"
)
BASE_PATH=~/workspace/SERVER
check_mount() {
local mount_point="$1"
if mount | grep -q "$mount_point"; then
echo "mounted"
else
echo "not mounted"
fi
}
print_server_table() {
local header="$1"
echo -e "\n${CYAN}${header}:${NC}\n"
printf "%-4s %-10s %-40s %-8s %-15s\n" "No" "Name" "Remote Path" "Port" "Status"
printf "%-4s %-10s %-40s %-8s %-15s\n" "──" "──────────" "────────────────────────────────────────" "────────" "───────────────"
local i=1
for key in "${!SERVERS[@]}"; do
mount_point="$BASE_PATH/${key^^}"
status=$(check_mount "$mount_point")
[ "$status" == "mounted" ] && status="${GREEN}✔ Mounted${NC}" || status="${RED}✘ Not Mounted${NC}"
REMOTE_INFO=$(echo "${SERVERS[$key]}" | cut -d':' -f1-2)
PORT=$(echo "${SERVERS[$key]}" | cut -d':' -f4)
printf "%-4s %-10s %-40s %-8s %-15b\n" "$i" "$key" "$REMOTE_INFO" "$PORT" "$status"
index_map[$i]=$key
((i++))
done
}
# ── Show server status ──────────────────────
print_server_table "📡 Registered SSHFS Servers"
# ── Action prompt ───────────────────────────
echo -e "\n${YELLOW}What would you like to do?${NC}"
echo -e "1) ${BLUE}Mount${NC}"
echo -e "2) ${BLUE}Unmount${NC}"
read -p "> " action_input
case "$action_input" in
1) ACTION="mount" ;;
2) ACTION="unmount" ;;
*)
echo -e "${RED}❌ Invalid selection.${NC}"
exit 1
;;
esac
# ── Server select ───────────────────────────
print_server_table "📦 Select a server to $ACTION"
echo ""
read -p "Enter the number of the server you want to $ACTION: " server_index
SERVER_KEY=${index_map[$server_index]}
if [ -z "$SERVER_KEY" ]; then
echo -e "${RED}❌ Invalid server number.${NC}"
exit 1
fi
# ── Final paths setup ───────────────────────
REMOTE_INFO=$(echo "${SERVERS[$SERVER_KEY]}" | cut -d':' -f1-2)
PORT=$(echo "${SERVERS[$SERVER_KEY]}" | cut -d':' -f4)
MOUNT_POINT="$BASE_PATH/${SERVER_KEY^^}"
if [ "$ACTION" == "mount" ]; then
echo -e "🔍 Checking if ${BLUE}$MOUNT_POINT${NC} is already mounted..."
if mount | grep "$MOUNT_POINT" >/dev/null; then
echo -e "${YELLOW}🔄 Already mounted → unmounting first...${NC}"
umount "$MOUNT_POINT"
fi
mkdir -p "$MOUNT_POINT"
echo -e "🔗 Mounting SSHFS: ${CYAN}$REMOTE_INFO${NC} → ${BLUE}$MOUNT_POINT${NC} (port $PORT)"
if [ "$PORT" != "22" ]; then
sshfs -p "$PORT" -o reconnect -o ServerAliveInterval=15 -o ServerAliveCountMax=3 "$REMOTE_INFO" "$MOUNT_POINT"
else
sshfs -o reconnect -o ServerAliveInterval=15 -o ServerAliveCountMax=3 "$REMOTE_INFO" "$MOUNT_POINT"
fi
if [ $? -eq 0 ]; then
echo -e "${GREEN}✅ Successfully mounted $SERVER_KEY!${NC}"
else
echo -e "${RED}❌ Mount failed. Please check credentials or network.${NC}"
fi
elif [ "$ACTION" == "unmount" ]; then
echo -e "🔌 Unmounting ${BLUE}$MOUNT_POINT${NC}..."
if mount | grep "$MOUNT_POINT" >/dev/null; then
umount "$MOUNT_POINT" && echo -e "${GREEN}✅ Successfully unmounted.${NC}" || echo -e "${RED}❌ Failed to unmount.${NC}"
else
echo -e "${YELLOW}ℹ️ Not mounted.${NC}"
fi
fi
만약 스크립트에 대해서 궁금하신 사항이나 변경하고 싶은 기능이 있으시면 댓글 달아주셔서 같이 고민해보면 좋을거 같습니다.
🍎 macOS에서 SSHFS 사용 시 참고 사항
macOS에서는 보안 제약으로 인해 SSHFS를 바로 사용할 수 없습니다.
이 경우 macFUSE 또는 osxfuse 등을 별도로 설치해야 하며, 보안 설정을 허용해야 하는 절차가 필요합니다.
이와 관련한 설치 및 권한 설정 방법은 다음에 별도로 정리해보겠습니다.
✅ 마무리
이 스크립트를 사용하면 복잡한 SSHFS 명령어를 매번 입력하지 않고도, 손쉽게 서버 디렉토리 마운트 관리를 할 수 있습니다.
반복되는 작업을 자동화하고 싶다면 꼭 한번 사용해보세요!