- winscp 설치 후 sftp로 접속 확인
- 파워쉘 스크립트 작성(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