2023年1月16日 星期一

透過synology web api進行基本檔案上傳下載

 synology預設只有提供給管理者ssh,所以有一些使用到ssh channel的方法都無法使用。如果需要用到NAS使用者自身權限進行檔案上下載,除了可以透過內建的rsync來完成之外,也可以嘗試使用synology的web API來達成。

該文件放在:

 https://global.download.synology.com/download/Document/Software/DeveloperGuide/Package/FileStation/All/enu/Synology_File_Station_API_Guide.pdf 

這邊先截取一些個人比較常用的工具做個紀錄。

Synolgy的web api大概可以區分成login -> action -> logout 。各自關係如下:



因為是web api,所以可以使用瀏覽器開之外,部分服務也可以透過curl來開啟。

確認目前NAS有提供哪些服務?

透過瀏覽器或curl輸入:

http://<IP>:5000/webapi/query.cgi?api=SYNO.API.Info&version=1&method=query&query=all

or curl

curl -v "http://<IP>:5000/webapi/query.cgi?api=SYNO.API.Info&version=1&method=query&query=all"

IP就是NAS所使用的IP。如果有https的使用者就把port從5000改為5001。(這是預設狀況,有自己修改的使用者再自行轉換)。通常在家用網路都不會有DNS,所以大部分的狀況下https都不會直接通,需要透過使用者進行二段式確認。

瀏覽器應該會噴出一些資訊,那些就是目前NAS有提供的服務。

測試NAS認證是否能登錄?

使用瀏覽器

http://<IP>:5000/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=login&account=<帳號>&passwd=<密碼>&

or curl

curl -v "http://<IP>:5000/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=login&account=<帳號>&passwd=<密碼>&"

如果出現以下類似訊息(重點是success)

{"data":{"did":"gTB7R8aNM7nHn7KNDhXLHxtIcwDQUmsd--y_Clz0iBwmpkkpQlICM2xUieck2-6OLcFANSwATOWgN2S8MXefkA","sid":"-rJX_WSNkhvyHIr8h0nhAFMGRYSkGSUwltQ6X8b-XhYJkzONnYy0oncxOz-1T_kIT3_5wVl_xVRfn_Syk2gaCM"},"success":true}

另外一項重點是_sid這項目。這等於是取得token以方便後面的上下載動作。


也透過curl可以把登錄資訊放在cookie中:

curl -v "http://<IP>:5000/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=login&account=<帳號>&passwd=<密碼>&format=cookie" -c synocookie

這樣登錄資訊就會放在synocookie中以利後面的使用。


登出則是

http://<IP>:5000/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=logout&account=<帳號>&passwd=<密碼>&


比較方便的方式是把資訊放到cookie中,後續可以用-b參數讀取


curl -j -c ./cookie http://<IP>:5000/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=login&account=<帳號>&passwd=<密碼>&session=FileStation&format=cookie


上傳資料

curl -F "filename=@檔案位置" -F "path=<NAS上的位置>" "http://<IP>:5000/webapi/entry.cgi?api=SYNO.FileStation.Upload&version=2&method=upload&_sid=1Z8QjAmvU0FMeX49MEFfwAf28oWE3CSslKVRmHHjNXUTcv-EU2I7cidfNwjoi5y1pZ_q0kzS-y65xrcVxUrM_0"

如果嫌SID部分太冗長,可以使用上面提到的cookie。使用curl的-b參數讀取

curl -F "filename=@檔案位置" -F "path=<NAS上的位置>" "http://<IP>:5000/webapi/entry.cgi?api=SYNO.FileStation.Upload&version=2&method=upload&" -b synocookie

上傳時,NAS上的位置要注意,開頭一定要用斜線(/)開頭,他會依照使用者的根目錄作出相對路徑。如果沒有用斜線開頭會噴錯。


後記
經過測試,有些帳號可以透過上面的方式成功上傳資料。但有些帳號不行。目前尚未找到無法成功的原因。
目前還是有部分package透過synology的web API上傳資料。有無法讓使用者透過SSH或是rsync上傳的需求或是希望讓使用者能用自己權限來操作的可以使用 N4S4 的 synology_api

references:
  • https://global.download.synology.com/download/Document/Software/DeveloperGuide/Os/DSM/All/enu/DSM_Login_Web_API_Guide_enu.pdf
  • https://global.download.synology.com/download/Document/Software/DeveloperGuide/Package/FileStation/All/enu/Synology_File_Station_API_Guide.pdf 



沒有留言:

張貼留言

iscsi 連線問題筆記

如果要進行umount但是出現target buzy sudo fuser -km 掛載點 sudo umount 掛載點 iSCSI重啟 sudo open-iscsi restart  掛載lun iscsiadm -m discovery -t sendtargets -p...