Post a reply

Options
Add an Attachment

If you do not want to add an Attachment to your Post, please leave the Fields blank.

(maximum 10 MB; please compress large files; only common media, archive, text and programming file formats are allowed)

Options

Topic review

PlutoP

Thanks Martin! That worked and everything else is going through with my script.
You're a freaking rockstar! I'll donate to you when I get home.
PlutoP

SSH Key Passphrase

Hey, Martin.

I believe I know why it's failing now. It's looking for the SSH Key Passphrase.
I had set a passphrase for the key itself. Is there code I can enter in the script to enter passphrase or should I make a new key without one? I have attached the log file for more details.

Thank for your help!
PlutoP
Guest

I receive this message after I had added the public key to our server. It's a different message than the one I was getting before.
Exception calling "Open" with "1" argument(s): "Connection has been unexpectedly closed. Server sent command exit status 0.

Authentication log (see session log for details):
Using username "PlutoP".
Authenticating with public key "rsa-key-20190501".
Authentication failed."
At C:\Users\PlutoP\Documents\powershellscript.ps1:20 char:5
+     $session.Open($sessionOptions)
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : SessionRemoteException
martin

Are you able to authenticate in WinSCP GUI using the keys? Or using any other SSH/SFTP client?
PlutoP

Hey, Martin.

Thanks for the reply! So, I tried it with using the keys, but it seems like the server is refusing it for some reason so I'm going to have to look at the logs and troubleshoot this issue.
Exception calling "Open" with "1" argument(s): "Connection has been unexpectedly closed. Server sent command exit status 0.

Authentication log (see session log for details):
Using username "PlutoP".
Server refused our key.
Authentication failed."
At C:\Users\PlutoP\Documents\Doc.ps1:20 char:5
+     $session.Open($sessionOptions)
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : SessionRemoteException
martin

Re: Using WinSCP .NET Assembly from PowerShell

PlutoP wrote:

I'd rather use Public/Private Keys but I need help with replacing the username/password code with some string: SshPrivateKeyPath and using the .pub and .ppk files to authenticate.

Correct, set SessionOptions.SshPrivateKeyPath to the path of your .ppk file.
https://winscp.net/eng/docs/library_sessionoptions#sshprivatekeypath

Easiest is to setup your session with private key in WinSCP GUI and have it generate a code template for you:
https://winscp.net/eng/docs/ui_generateurl#code
PlutoP

Using WinSCP .NET Assembly from PowerShell

I also tried using WinSCP .NET Assembly from PowerShell
# Load WinSCP .NET assembly
Add-Type -Path "C:\Users\PlutoP\Downloads\NewFolder\WinSCPnet.dll"
 
# Set up session options
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
    Protocol = [WinSCP.Protocol]::Sftp
    HostName = "SFTP server address"
    UserName = "PlutoP"
    Password = "xxxxxxxxxx"
    SshHostKeyFingerprint = "ssh-rsa 1024 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
}
 
$session = New-Object WinSCP.Session
 
try
{
    # Connect
    $session.Open($sessionOptions)
 
    # Transfer files
    $session.PutFiles("C:\Users\PlutoP\Download\Document.csv", "/PlutoP/NewFolder/*").Check()
}
finally
{
    $session.Dispose()
}

So this actually works, but I do not want username and password in this script.
I'd rather use Public/Private Keys but I need help with replacing the username/password code with some string: SshPrivateKeyPath and using the .pub and .ppk files to authenticate.

Thank you!
PlutoP
PlutoP

SFTP PowerShell script with WinSCP

Hey,

I'm trying to figure out how to take a file from a PC and upload it unto a SFTP server using WinSCP. I'm getting stuck after I run the command. First a credential window opens and I enter my credentials. That is successful! but then...I get a message that says...
cmdlet Move-WinSCPItem at command pipeline position 1

Supply values for the following parameters:
WinSCPSession:

I don't know what to put in for this WinSCPSession value. It just says...
Move-WinSCPItem : Cannot process argument transformation on parameter 'WinSCPSession'. Cannot convert the "" value of type "System.String" to type "WinSCP.Session".

At line:3 char:1
+ Move-WinSCPItem -Path "/PlutoP/NewFolder/Document.csv" -Destination "C:\U ...

I've tried Send-WindSCPItem, Move-WinSCPSessionOption, Receive-WinSCPItem, New-WinSCPSession, New-WinSCPSessionOption. Needless to say, I am new to this and would be grateful for any assistance!

Here's the script:
# Piping the WinSCPSession into the Receive-WinSCPItem auto disposes the WinSCP.Session object after completion.
New-WinSCPSessionOption -Hostname "SFTP server address" -Credential (Get-Credential) -SshHostKeyFingerprint "ssh-rsa 1024 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
Move-WinSCPItem -Path "/PlutoP/NewFolder/Document.csv" -Destination "C:\Users\PlutoP\Download\Document.csv"