簡體   English   中英

在 PowerShell 中回答 Plink hostkey 和 KEX 提示

[英]Answering Plink hostkey and KEX prompts in PowerShell

我成功地從下面的plink.exe命令行中獲取了我需要的結果文本到$response 為了讓命令在遠程 SSH 設備上執行,我必須先模擬擊鍵Y {enter} Y {enter}

代碼:

$Device = "SSHDeviceHostname"
$Command = "sho ver | include uptime is"
Add-Type -AssemblyName System.Windows.Forms

$wshell.SendKeys('y~y~'); $response = cmd /C "C:\Windows\plink.exe -ssh -l `"$($CredentialToken.GetNetworkCredential().username)`" -pw `"$($CredentialToken.GetNetworkCredential().password)`" $Device `"$Command`"" 2>$null

結果:

y
y


C:\Users\MKANET\Desktop> $response
SSHDeviceHostname uptime is 5 years, 25 weeks, 1 day, 3 minutes

C:\Users\MKANET\Desktop>

我想隱藏假擊鍵Y { enter } Y { enter } 不被顯示; 不會對$response值產生不利影響。 我試圖在本地主機上invoke-command整個腳本塊但沒有成功。 我可能可以在單獨的隱藏 PowerShell session 中執行此代碼。 但是,這很可能會大大減慢速度。

PS:我也嘗試使用 cmd (下)不幸的是 plink.exe 完全忽略了第二個 echo `y; 立即中止連接:

cmd /C "Echo Y && Echo Y | plink.exe -ssh -l `"$($Credential.GetNetworkCredential().username)`" -pw `"$($Credential.GetNetworkCredential().password)`" $DeviceName `"$Command`""

要回答您的字面問題,您可以在批處理文件中執行以下操作:

powershell -command "Write-Host -NoNewLine y ; sleep 2 ; Write-Host -NoNewLine y" | plink ...

請注意,該代碼僅適用於批處理文件(在cmd中)。 它在Windows PowerShell 中不起作用。 | Windows PowerShell 中的語義與 cmd 中的語義不同cmd. 在 Windows PowerShell 中,它會等待powershell完成后才開始plink ,所以sleep的唯一作用就是延遲啟動plink cmdpowershellplink中,您可以根據需要並行運行。

正如@mklement0 所評論的,自 PowerShell (核心) 6 以來,這已經得到了改進。所以你可以這樣做:

& { 'y'; sleep 2; 'y' } | plink ...

但是你不應該盲目地接受主機密鑰。 您失去了對中間人攻擊的保護。 您應該使用-hostkey開關驗證主機密鑰。
請參閱在 Start-Process 中添加命令以向 Plink 提供“y”輸入

對於 KEX 驗證也是如此。 Plink 中沒有 KEX 的開關。 但是您可以在允許 diffie diffie-hellman-group1-sha1的注冊表中創建臨時存儲 session。 並調用Plink中存儲的session。

$hostname = "example.com"
$username = "username"
$password = "password"
$hostkey = "c4:26:18:cf:a0:15:9a:5f:f3:bf:96:d8:3b:19:ef:7b"

$session = "Dummy"
$key = "HKCU:\SOFTWARE\SimonTatham\PuTTY\Sessions\$session"

New-Item -Path $key -Force | Out-Null
New-ItemProperty -Path $key -Name HostName -Value $hostname | Out-Null
New-ItemProperty -Path $key -Name UserName -Value $username | Out-Null
New-ItemProperty -Path $key -Name KEX `
    -Value "ecdh,dh-gex-sha1,dh-group14-sha1,rsa,dh-group1-sha1,WARN" | Out-Null

& plink $session -pw $password -hostkey $hostkey

暫無
暫無

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

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