2023年1月12日 星期四

透過rsync不互動(without prompting)輸入密碼上傳資料

情境

  • synology 的 NAS 只有 administrator群組可以使用SSH。因此跟SSH相關的服務可能無法順利運作(如scp、sftp等等)。如果開通了權限,把 administrator帳號放到遠端機器上也不是個聰明的作法。
    1. 使用synology NAS
    2. 有特定使用者需要自動化在特定時間上傳資料,所以沒辦法親自輸入密碼
    3. 不是特別在意密碼可能會被別人看到(例如使用公用帳號,密碼也是公用的)

    處理方式大綱
    1. 建立特定帳號(如果沒有建立也沒關係,可以在底下步驟中把rsync權限改為開通給特定人士)
    2. 開通特定帳號rsync權限
    3. 在client進行檔案上傳
    作法

    ======  server (synology nas) 設定部分 =======

    • 開啟公用帳號。這邊是要避免自己在NAS上的帳號密碼在遠端server上暴露。所以設定一個帳號。這帳號記得把權限都縮到最小,避免出意外的時候災情慘重。

    • 打開rsync的權限。先進入到NAS當中:
    控制台 > 檔案服務 > rsync


    把"啟用rsync"跟"啟用rsync帳號"打勾。

    • 設定rsync帳號
    "編輯rsync帳號" > "新增"

    把剛剛設定的公用帳號設定進去。這邊比較奇怪的地方是這邊選項應該是可以設定額外密碼的。但我設定完以後都沒辦法用這密碼進行rsync,只能用這帳號登入DSM的密碼才能正常運作。所以這邊密碼就不是太重要,有設定就好。

    以上NAS端就設定完畢。後面進行client設定


    ======  client 設定部分 =======


    client設定是使用普通電腦,上面跑的作業系統會比synology OS有彈性些。synology的NAS不是使用daemon進行rsync服務,所以把密碼放在環境變數中(export RSYNC_PASSWORD)或是使用檔案(--password-file=rsync_pass)儲存都無法成功。

    變通方式是採用"sshpass"指令達成。
    這個指令的原理大概就是會搜尋互動(prompt)的文字中有出現password的pattern,然後就直接把密碼輸入進去。狀況類似expect指令,但比expect專業一些。原本是用於ssh的互動部分,看來rsync也可以支援。
    以下設定是公用帳號為rsync.cd,密碼是********。上傳的檔案檔名是zero,要放到NAS_IP的/volume1/p 資料夾底下。

    • 方式1. 把密碼直接給到指令當中
    sshpass -p "********" rsync -vh zero rsync.cd@NAS_IP:/volume1/p/


    • 方式2. 把密碼放在檔案中(這邊檔名範例是passwrod.txt當中放入密碼)
    sshpass -f passwrod.txt rsync -vh zero rsync.cd@NAS_IP:/volume1/p/



    方式1跟方式2的差異在於後續推到git上需不需把密碼放到程式碼中。方式1會連同密碼一起推上去。方式2則可以透過Ansible等佈署工具做第二段設定。





    沒有留言:

    張貼留言

    iscsi 連線問題筆記

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