File ftpscript.txt
option batch continue
option confirm off
open admin@192.168.1.42
synchronize remote "E:\Backup" "/media/DATA/BK"
exit
.........................................................
File ftp.cmd
echo off
setlocal
set year=%date:~10,4%
set month=%date:~4,2%
set day=%date:~7,2%
set h=%time:~0,2%
set h=%h: =0%
set m=%time:~3,2%
set filename=log_%year%%month%%day%%h%%m%.txt
E:\WinSCP\winscp.com /script=E:\WinSCP\Scripts\ftpscript.txt >> E:\WinSCP\logs\%filename%
open ftp://user_ftp:pass_ftp@ip_ftp
synchronize remote [Source] [Target]
exit
Thay thế các thông tin user_ftp, pass_ftp, ip_ftp bằng các thông tin tương ứng.https://winscp.net/eng/docs/task_synchronize
https://winscp.net/eng/docs/task_synchronize_full
https://winscp.net/eng/docs/task_keep_up_to_date
https://winscp.net/eng/docs/scripting
https://winscp.net/eng/docs/scriptcommand_synchronize
..........................................................
File backup.cmd
setlocal
set year=%date:~10,4%
set month=%date:~4,2%
set day=%date:~7,2%
set h=%time:~0,2%
set h=%h: =0%
set m=%time:~3,2%
set filename=B7R2_%year%%month%%day%.rar
echo %filename%
E:\WinSCP\WinSCP.com ^
/log="E:\WinSCP\WinSCP.log" /ini=nul ^
/command ^
"open sftp://admin:Password@192.168.1.42/ -hostkey=""ssh-ed25519 255 eusLUlvUyZC+VnuPmjHwoyNbxX9PfOUQ7kx3Jpmd9K8""" ^
"put E:\Backup\%filename% /media/DATA/BK/" ^
"exit"
set WINSCP_RESULT=%ERRORLEVEL%
if %WINSCP_RESULT% equ 0 (
echo Success
) else (
echo Error
)
exit /b %WINSCP_RESULT%
Giới thiệu giải pháp sao lưu, đồng bộ file và thư mục
Nhằm mục đích chia sẻ kinh nghiệm trong công tác sao lưu, phục hồi các nguồn dữ liệu của cá nhân nói riêng và các nguồn dữ liệu của Tổng công ty Điện lực miền Nam nói chung, Công ty CNTT (SPCIT) hướng dẫn giải pháp đồng bộ file, thư mục bằng phần mềm WinSCP. Giải pháp đưa ra với giả định cần backup hoặc synchonize thư mục từ source đến target hoặc từ target đến source, trong đó target là thư mục được đặt ở FTP hoặc SFTP hoặc SCP.
Hiện nay có rất nhiều công cụ để đồng bộ như: FTPVoyager, SyncBackPro, WinScp..., tuy nhiên đa phần là có phí, nếu sử dụng miễn phí thì có FTPVoyager của hãng Solarwinds nhưng tốc độ copy dữ liệu khá chậm, SyncBackPro thì phải mất phí. Trong các phần mềm miễn phí có WinScp là chương trình dùng để copy dữ liệu với tốc độ nhanh, giao diện đơn giản và có đầy đủ tài liệu, chỉ cần đọc tài liệu và lập lịch trong windows/linux thì chúng ta có thể biến WinScp thành một công cụ hữu ích trong việc tự động đồng bộ file cũng như thư mục chúng ta mong muốn. Sau đây hướng dẫn chi tiết:
Để thực hiện đầu tiên ta phải có phần mềm WinSCP, vào trang https://winscp.net/eng/download.php vào mục Download, phiên bản hiện tại là 5.17 (như hình dưới)
Tiếp theo ta chọn [Other Download], mình thường sử dụng WinScp dạng file portable để không cần cài đặt, tìm đến mục [Portable executable] và bấm nút download
Sau khi download về ta giải nén đến một thư mục cần làm việc, tuy nhiên cần sửa lại đường dẫn trong file script phía dưới, ở đây mình giải nén đến ổ D:\Softs\WinScp (như hình)
Bước tiếp theo là viết script file để thực thi, tạo một file có tên [winscpput.txt], sau đó gõ các dòng lệnh sau (gõ sau dấu nháy):
“
open ftp://user_ftp:pass_ftp@ip_ftp
synchronize remote [Source] [Target]
exit
”
Thay thế các thông tin user_ftp, pass_ftp, ip_ftp bằng các thông tin tương ứng. Trong đó [Source] là thư mục cần backup, [Target] là nơi lưu trữ backup. Lưu file này vào thư mục D:\Softs\WinScp\Script. Ở đoạn lệnh trên nếu ta thay synchronize remote thành synchronize local thì sẽ chép file từ target về source.
Tiếp theo tạo file có tên [ScriptPut.bat] và open with file bằng notepad, sau đó gõ các lệnh sau (gõ sau dấu nháy):
“
echo off
setlocal
set year=%date:~10,4%
set month=%date:~4,2%
set day=%date:~7,2%
set h=%time:~0,2%
set h=%h: =0%
set m=%time:~3,2%
set filename=log_%year%%month%%day%%h%%m%.txt
"D:\Softs\WinSCP\winscp.com" /script=D:\Softs\WinScp\Script\winscpput.txt >> D:\Soft\Winscp\logs\%filename%
”
Lưu file này trong ổ D:\Softs\WinScp\Script. Lưu ý ta cần tạo thư mục [logs] trong ổ D:\Soft\Winscp\logs, mục đích khi WinScp thực thi sẽ tạo file log, chúng ta có thể đọc file log này để xác định xem tình hình đồng bộ, các lỗi.
Bước tiếp theo ta bấm vào file [ScriptPut.bat] để chạy thử, kiểm tra kết quả bằng cách xem log file trong thư mục [logs].
Để tự động hóa trong việc đồng bộ, ta tiến hành lập lịch (Scheduler) trong windows, trong quá trình lập lịch khi đến bước [Start Program] ta trỏ đến file [ScriptPut.bat] mà ta tạo lúc nãy.
Ngoài ra cần cho phép chạy task scheduler chạy với quyền cao nhất và không cần hỏi password. Bấm OK để kết thúc. Như vậy chúng ta đã lập xong một task tự động thực thi vào thời gian mà đã lập lịch.
Trên đây là các bước cơ bản để thực hiện việc backup, đồng bộ giữa 2 thư mục source và target, người dùng có thể vào trang https://winscp.net/eng/docs/start để tìm hiểu thêm các lệnh command line và gắn vào script trên.
Synchronization Direction
There are three possible directions (targets) of synchronization.
With Local direction, changes from remote directory (source) are applied to local directory (target). Only the local directory is modified.
Remote mode is the same as Local, just in an opposite direction: changes from the local directory (source) are applied to the remote directory (target). Only the remote directory is modified.
In Both mode, both local and remote directories can be modified (both can act as both source and target).
Command | Description | |||||
---|---|---|---|---|---|---|
call | Executes arbitrary remote shell command | |||||
cd | Changes remote working directory | |||||
checksum | Calculates checksum of remote file | |||||
chmod | Changes permissions of remote file | |||||
close | Closes session | |||||
cp | Duplicates remote file | |||||
echo | Prints message onto script output | |||||
exit | Closes all sessions and terminates the program | |||||
get | Downloads file from remote directory to local directory | |||||
help | Displays help | |||||
keepuptodate | Continuously reflects changes in local directory on remote one | |||||
lcd | Changes local working directory | |||||
lls | Lists the contents of local directory | |||||
ln | Creates remote symbolic link | |||||
lpwd | Prints local working directory | |||||
ls | Lists the contents of remote directory | |||||
mkdir | Creates remote directory | |||||
mv | Moves or renames remote file | |||||
open | Connects to server | |||||
option | Sets or shows value of script options | |||||
put | Uploads file from local directory to remote directory | |||||
pwd | Prints remote working directory | |||||
rm | Removes remote file | |||||
rmdir | Removes remote directory | |||||
session | Lists connected sessions or selects active session | |||||
stat | Retrieves attributes of remote file | |||||
synchronize | Synchronizes remote directory with local one | The Console Interface Tool
Learn about Verifying the Host Key or Certificate in Script
The first connection to an SSH server requires verification of the host key. To automate the verification in script, use You can find the key fingerprint on Server and Protocol Information Dialog. You can also copy the key fingerprint to clipboard from the confirmation prompt on the first (interactive) connection using Copy key fingerprints to clipboard command (in the script, use SHA-256 fingerprint of the host key only). Learn more about obtaining host key fingerprint.
FTPS/WebDAVS TLS/SSL certificate signed by untrusted authority may also need to be verified. To automate the verification in script, use Running a Script under a Different Account (e.g., Using a Scheduler)If you are going to run the script under a different account (for example using the Windows Task Scheduler), make sure the script does not rely on a configuration settings that might differ on the other account. When using registry as configuration storage, the settings are accessible only for your Windows account. Ideally, make sure the script does not rely on any external configuration, to make it completely portable. Note that the configuration also includes verified SSH host keys and FTPS/WebDAVS TLS/SSL certificates. For details, see the next section and Why does WinSCP not work in a new environment (operating system, machine, user account, network), when it works for me in a different environment already? Sharing Configuration with Graphical ModeIn scripting/console mode, WinSCP shares configuration with graphical mode by default. While this can be useful in some cases, it can also be a disadvantage. The disadvantage is that change to configuration in graphical mode may break your script (common example is enabling Existing files only option for synchronization). Also the script is not portable to other machines, when it relies on an external configuration. If you want to protect your script from such inadvertent change or if you want to make the script portable, you should isolate its configuration from graphical mode explicitly.
The best way to do that is to configure all the options you need using script commands only (
Alternatively export your configuration to a separate INI file and reference it using Generating ScriptYou can have WinSCP generate a script template for you. Advertisement Example
In the example below, WinSCP connects to # Connect open sftp://user:password@example.com/ -hostkey="ssh-rsa 2048 xxxxxxxxxxx..." # Change remote directory cd /home/user # Download file to the local directory d:\ get examplefile.txt d:\ # Disconnect close # Connect as a different user open sftp://user2:password@example.com/ # Change the remote directory cd /home/user2 # Upload the file to current working directory put d:\examplefile.txt # Disconnect close # Exit WinSCP exit
Save the script to the file winscp.com /ini=nul /script=example.txt
For simple scripts you can specify all the commands on command-line using winscp.com /ini=nul /command "open sftp://user:password@example.com/ -hostkey=""ssh-rsa 2048 xxxxxxxxxxx...""" "get examplefile.txt d:\" "exit"
In Windows batch file, you can use winscp.com /ini=nul /command ^ "open sftp://user:password@example.com/ -hostkey=""ssh-rsa 2048 xxxxxxxxxxx...""" ^ "get examplefile.txt d:\" ^ "exit" See other useful example scripts. Converting Script to Code Based on .NET Assembly |
Không có nhận xét nào:
Đăng nhận xét