PowerShell遠程會話之大文件傳輸


  在運維當中,最經常要碰上文件在各個服務器之間的傳輸,而使用PowerShell來管理服務器的文件傳輸同樣也有很多種方式,如果僅僅是傳輸些小文件的話,那么像Scp,Sftp,Copy-Item等等這些都能很輕易的解決問題。

  但是,如果要傳輸的文件很大,好幾個G,甚至是好幾十個G的情況下,這些工具就顯得很吃力了。

  最經常碰上的情況是如下這種情況

  PCA遠程SSH到PCB上,PCB要從Server上面把文件傳輸回來,在SSH或是PowerShell上面來,這種情況就是多跳遠程控制

  我們使用遠程連接了PCB,在遠程PCB中再想進行遠程操作,就會提示錯誤。因為默認的認證信息只會傳遞一跳。

  關於多跳,微軟官方文檔有給出的解決方案是:https://docs.microsoft.com/en-us/powershell/scripting/learn/remoting/ps-remoting-second-hop?view=powershell-7

  多種解決方案的核心點就是需要憑據。

  而密碼和基於密鑰的身份驗證之間的雙跳最大差異就是:

    1、通過密碼身份驗證打開的遠程會話具有附加到它的用戶憑據,因此能夠作為用戶進行出站身份驗證。

    2、通過基於密鑰的身份驗證打開的遠程會話沒有關聯的用戶憑據,因此不能作為用戶進行出站身份驗證。這是系統設計的,並且遵循標准 Windows 安全規則。

  但是我們在使用OpenSSH的時候,我們有的時候就是只想使用基於密鑰的這種認證方式,通過密鑰我們又沒辦法關聯用戶憑據,那我們又該怎么辦呢?

  方法一、

  那我們就通過Windows的任務計划來實現,通過遠程登錄到PCB上面之后,通過建立任務計划----》運行任務計划,這樣在任務計划里面創建的傳輸就能達到最大速度。  

  以下是一個范例,僅供參考: 

$PS=New-PSSession -HostName PCB -KeyFilePath d:\id_rsa $scripts = { $schaction = New-ScheduledTaskAction -Execute "robocopy" -Argument "\\Server\Share\Test D:\Test\ *.*"; $schtrigger = New-ScheduledTaskTrigger -AtLogOn; $schUser = (Get-CimInstance -ClassName win32_ComputerSystem).UserName; Register-ScheduledTask -TaskName "copy" -Trigger $schtrigger -User $schUser -Action $schaction; Start-ScheduledTask -TaskName "copy"; } Invoke-Command -Session $PS -ScriptBlock $scripts

 

  這段代碼的意思就是PCB從Server服務器上面的Share\Test文件夾下載到D盤目錄下的Test下面,其實通過這個簡單的范例可以推導出很多不方便的操作,其實都可以通過調用任務計划來實現

  方法二、

   對於網絡文件共享,有很多使用的是SMB協議,平常在Windows的地址直接輸入\\Server\Share這種方式就是使用SMB協議,既然知道了是通過這種協議,那么我們就可以通過使用PowerShare里面的smbshare這個模塊來實現

  以下是使用smbshare來實現的一個范例  

$ps=New-PSSession -HostName PCB -KeyFilePath D:\id_rsa $scripts={ New-SmbMapping -LocalPath "K:" -RemotePath "\\Server\Share" -UserName "administrator" -Password ""; robocopy K:\Test D:\ smbshare.txt *.*; } Invoke-Command -Session $ps -ScriptBlock $scripts

  這段代碼的意思就是先在PCB機子上面創建遠程服務器文件映射到本地的K盤,K盤相對應的是Server服務器上面的Share文件夾,然后把Share目錄下的Test整個文件夾拷貝到PCB機子上面D盤

  注:如果要刪除SmbMapping的話,發現直接使用Remove-SmbMapping無效,再Get-SmbMapping依然存在,這個時候可以使用

  Remove-SmbMapping -UpdateProfile -Force
  或者是

  net use * /del /y,把所有的磁盤映射都刪除。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM