Я использую powershell с библиотекой SSH.Net для подключения к серверам ssh и выполнения команд. В основном это работает нормально, за исключением того, что у меня есть система, в которой включена только интерактивная аутентификация с клавиатуры (и я не могу это изменить).
Я нашел ответ, описывающий, как использовать EventHandler в C# для выполнения аутентификации типа интерактивной клавиатуры, но мне не удалось чтобы успешно перенести это на powershell. Похоже, что-то связано с тем, как я обрабатываю событие, но я не уверен, что именно. Любая помощь будет принята с благодарностью!
Когда я пытаюсь запустить приведенный ниже код, я получаю эту ошибку:
Exception calling "Connect" with "0" argument(s): "Value cannot be null.
Parameter name: data"
At C:\Users\nathan\Documents\ssh-interactive-test.ps1:35 char:1
+ $Client.connect()
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentNullException
Это соответствующий раздел кода, который я запускаю:
$scriptDir = $(Split-Path $MyInvocation.MyCommand.Path)
[reflection.assembly]::LoadFrom((Resolve-Path "$scriptDir\Renci.SshNet.3.5.dll")) | Out-Null
$ip = "ip address"
$user = "username"
$pass = "password"
$kauth = New-Object Renci.SshNet.KeyboardInteractiveAuthenticationMethod($user)
$pauth = New-Object Renci.SshNet.PasswordAuthenticationMethod($user, $pass)
$action = {
foreach ($prompt in $event.SourceEventArgs.Prompts) {
if ($prompt.Request -like 'Password:*') {
$prompt.Response = $pass
}
}
}
$oe = Register-ObjectEvent -InputObject $kauth -EventName AuthenticationPrompt -Action $action
$connectionInfo = New-Object Renci.SshNet.ConnectionInfo($ip, 22, $user, $pauth, $kauth)
$Client = New-Object Renci.SshNet.SshClient($connectionInfo)
$Client.connect()
Спасибо за прочтение!