Skip to content

Instantly share code, notes, and snippets.

@piccaso
Last active December 7, 2022 07:07
Show Gist options
  • Save piccaso/d963331dcbf20611b094 to your computer and use it in GitHub Desktop.
Save piccaso/d963331dcbf20611b094 to your computer and use it in GitHub Desktop.
ssh.net Example - Keybased Authentication, File Upload, Shell Commands
/*
get SSH.NET (BSD License: http://sshnet.codeplex.com/license)
with NuGet:
>Install-Package SSH.NET -Version 2013.4.7
or just get the dll from here: http://j.mp/sshNet
*/
using System;
using System.Collections.Generic;
using Renci.SshNet; /* reference needed: Renci.SshNet.dll */
class Program
{
static void Main(string[] args){
// Setup Credentials and Server Information
ConnectionInfo ConnNfo = new ConnectionInfo("hostOrIP",22,"username",
new AuthenticationMethod[]{
// Pasword based Authentication
new PasswordAuthenticationMethod("username","password"),
// Key Based Authentication (using keys in OpenSSH Format)
new PrivateKeyAuthenticationMethod("username",new PrivateKeyFile[]{
new PrivateKeyFile(@"..\openssh.key","passphrase")
}),
}
);
// Execute a (SHELL) Command - prepare upload directory
using (var sshclient = new SshClient(ConnNfo)){
sshclient.Connect();
using(var cmd = sshclient.CreateCommand("mkdir -p /tmp/uploadtest && chmod +rw /tmp/uploadtest")){
cmd.Execute();
Console.WriteLine("Command>" + cmd.CommandText);
Console.WriteLine("Return Value = {0}", cmd.ExitStatus);
}
sshclient.Disconnect();
}
// Upload A File
using (var sftp = new SftpClient(ConnNfo)){
string uploadfn = "Renci.SshNet.dll";
sftp.Connect();
sftp.ChangeDirectory("/tmp/uploadtest");
using (var uplfileStream = System.IO.File.OpenRead(uploadfn)){
sftp.UploadFile(uplfileStream, uploadfn, true);
}
sftp.Disconnect();
}
// Execute (SHELL) Commands
using (var sshclient = new SshClient(ConnNfo)){
sshclient.Connect();
// quick way to use ist, but not best practice - SshCommand is not Disposed, ExitStatus not checked...
Console.WriteLine(sshclient.CreateCommand("cd /tmp && ls -lah").Execute());
Console.WriteLine(sshclient.CreateCommand("pwd").Execute());
Console.WriteLine(sshclient.CreateCommand("cd /tmp/uploadtest && ls -lah").Execute());
sshclient.Disconnect();
}
Console.ReadKey();
}
}
@hgonzalezv
Copy link

Very helpfull. Thx!

@SaddamBInSyed
Copy link

Any idea how to provide a option like StrictHostKeyChecking=no to the ssl client?

please help

@MWinnGitHub
Copy link

Hi All,
I've been struggling with just running a basic command on a unix host.
Example what I have come up with
`Public Function CreateConnectionInfo() as ConnectionInfo
Dim connNfo as New PasswordConnectionInfo("host", "user", "pw")

Using sshClient = New sshClient(connNfo)
sshClient.Connect()

Using cmd = sshClient.CreateCommand("ls -ltr")
    cmd.Execute()
    MsgBox("command>" & cmd.CommandText)
    MsgBox("Return Value = {0}, cmd.ExitStatus)
End Using

End Using
`
When I check the values being send I never see the PW and the host refuses the connection. I had to have my pw reset about 20 times today..lol

My wish is to use public/private keys instead of a user/pw. Which i have used/created with putty and use it everyday.

Any suggestions would be greatly appreciated.

WannaBe Programmer
MW

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment