1. Home
  2. Docs
  3. NAS
  4. 파일동기화
  5. FTP방식(winscp)

FTP방식(winscp)

  1. winscp 설치 후 sftp로 접속 확인
  2. 파워쉘 스크립트 작성(sftp_upload.ps1)
# WinSCP .NET Assembly 로드
Add-Type -Path "C:\Program Files (x86)\WinSCP\WinSCPnet.dll"

# SFTP 세션 설정
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
    Protocol = [WinSCP.Protocol]::Sftp
    HostName = "NAS아이피"
    UserName = "NAS 계정"
    Password = "NAS 패스워드"
    SshHostKeyFingerprint = "ssh-rsa 3072 SSH정보 작성"
}

$session = New-Object WinSCP.Session
try {
    $session.Open($sessionOptions)

    # ✅ 증분 동기화 (rsync 스타일)
    $synchronizationResult = $session.SynchronizeDirectories(
        [WinSCP.SynchronizationMode]::Remote, # 로컬 → 원격 동기화
        "D:\sftp", "/test", $False)

    # ✅ 동기화 실행 및 결과 확인
    $synchronizationResult.Check()
} finally {
    $session.Dispose()
}

※ SSH 정보는 SSH로 접속 후 아래 명령어로 확인 가능

ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub

3. 작업 스케쥴러 업로드용 윈도우 배치 파일 작성

@echo off
powershell.exe -ExecutionPolicy Bypass -File "C:\Users\user\Downloads\sftp_upload.ps1"
exit

만약 경로에 한글이 포함된 경우 스크립트를 다음과 같이 한다.

$env:LC_ALL='C.UTF-8'
[System.Console]::OutputEncoding = [System.Text.Encoding]::UTF8

# WinSCP .NET Assembly 로드
Add-Type -Path "C:\Program Files (x86)\WinSCP\WinSCPnet.dll"

# SFTP 세션 설정
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
    Protocol = [WinSCP.Protocol]::Sftp
    HostName = "나스 아이피"
    UserName = "계정명"
    Password = "패스워드"
    SshHostKeyFingerprint = "ssh-rsa 3072 xxxxxxxxxxxx"
}

$session = New-Object WinSCP.Session
try {
    $session.Open($sessionOptions)

    # ✅ 증분 동기화 (rsync 스타일)
    $synchronizationResult = $session.SynchronizeDirectories(
        [WinSCP.SynchronizationMode]::Remote, # 로컬 → 원격 동기화
        "출발지 경로", "도착지 경로", $False)

    # ✅ 동기화 실행 및 결과 확인
    $synchronizationResult.Check()
} finally {
    $session.Dispose()
}

만일 수동으로 스크립트를 실행하려고하나 에러가 나거나 창이 바로 닫히면 아래 복사 후 해당 페이지에서 진행(한번만 허용할거면 y)

Set-ExecutionPolicy Unrestricted -Scope Process

How can we help?