簡體   English   中英

Posh-ssh 是否不適用於 Windows 任務計划程序

[英]Does Posh-ssh not work with windows Task Scheduler

一直在嘗試使用 posh-ssh 連接到 sftp。 當我運行它時工作正常,當我嘗試通過 Windows 任務調度程序運行它時它不起作用。

我嘗試切換要運行腳本的用戶,例如管理員、我自己、系統等。

我曾嘗試使用密鑰保存密碼並稍后解密。

$Password = ConvertTo-SecureString 'sftpPW' -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential($SFTPUser, $Password) 
$sftpIP = 'hostIP'
$sftpSess = New-SFTPSession -ComputerName $SftpIp -Credential $Credential

然后其他方法 VVVVVVVVVV 這部分不是在腳本中運行而是創建密碼

Get-Random -Count 32 -InputObject (0..255) | Out-File -FilePath encrypt
ConvertTo-SecureString 'sftpPW' -AsPlainText -Force | convertFrom-secureString -key (get-content -path encrypt) | Out-File pw

^^^^^^^^^^

$SFTPUser="user"
$password = (cat pw | ConvertTo-SecureString -key (Get-Content -path encrypt))
$Credential = New-Object System.Management.Automation.PSCredential($SFTPUser, $Password) 
$sftpIP = 'hostIP'
$sftpSess = New-SFTPSession -ComputerName $SftpIp -Credential $Credential

編輯*

Import-Module Posh-SSH
$datestuff = Get-Date
echo "start $datestuff" > C:\sftptestlog
$SFTPUser="user"
echo $sftpuser >> C:\sftptestlog
$Password = ConvertTo-SecureString 'sftpPW' -AsPlainText -Force
echo $password >> C:\sftptestlog
$Credential = New-Object System.Management.Automation.PSCredential($SFTPUser, $Password) 
$sftpIP = 'hostip'

echo $Credential >> C:\sftptestlog
echo $sftpip >> C:\sftptestlog
$sftpSess = New-SFTPSession -ComputerName $SftpIp -Credential $Credential
echo $sftpSess >> C:\sftptestlog

sftptestlog 的預期輸出

開始時間 2019 年 9 月 10 日 16:31:19

用戶

System.Security.SecureString

用戶名密碼

-------- --------

用戶 System.Security.SecureString

主機IP

已連接的 SessionId 主機

--------- ---- ---------
2 主機IP 真

以上輸出僅在從命令行運行腳本時發生。 使用調度程序時,輸出是相同的,只有最后幾行(從 sessionID 開始)沒有打印出來。

我強烈建議您將一些日志記錄到您的腳本中,以便您可以診斷這類事情,因為任務調度程序事件日志根本沒有太大幫助。 一個簡單的方法是使用Start-Transcript

# Put this line at the very start of your script
Start-Transcript -Path 'c:\temp\sftplog.txt'

Write-Host 'Setting up user credentials'
$Password = ConvertTo-SecureString 'sftppassword' -AsPlainText -Force
$SFTPUser="username"
$Credential = New-Object System.Management.Automation.PSCredential($SFTPUser, $Password) 

# Destination host
$sftpIP = 'hostip'
Write-Host 'Destination host is $sftpIP, testing availability'
Try {
    Test-Connection -ComputerName $sftpIP -ErrorAction Stop
    Write-Host 'Host is contactable'
}
Catch {
    $_.Exception
}


# Attempt connection
Try {
    Write-Host 'Trying to connect via SFTP to $SftpIP'
    $sftpSess = New-SFTPSession -ComputerName $SftpIp -Credential $Credential -ErrorAction Stop
    Write-Host 'Done'
}
Catch {
    $_
}

# Put this line at the very end of your script
Stop-Transcript

診斷出問題后,您可以刪除 Transcript 和/或所有 Write-Host 命令。

發現ENV:PSModulePath在使用任務計划程序時沒有安裝模塊的路徑。 導入模塊時,我直接鏈接到模塊所在的位置。 Import-Module "C:\Program Files\WindowsPowerShell\Modules\Posh-SSH"

經過大量的頭部抨擊后弄清楚了這一點。 問題是 SSH 連接等待您接受 SSL 證書為有效。 因此它會在 New-SFTPSession 處暫停等待您的輸入。 如果您以自己的身份運行它,它只會詢問一次,因此您可能單擊了“確定”並且再也不必這樣做了。

再多的錯誤檢查或導入模塊都無法解決這個問題。

包括標志 -AcceptKey -Force ,它就像一個冠軍。

New-SFTPSession -ComputerName $server -Credential $creds -AcceptKey -Force

為避免 posh-ssh 模塊的路徑出現問題,您可以使用以下命令安裝它:

安裝模塊豪華 ssh -Scope AllUsers

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM