none
Befehlsfolgen via ssh senden RRS feed

  • Frage

  • Hallo!

    Mein Kunde will von mir ein Powershell-Script haben, das Einstellungen auf einem Lenovo-Flex-CMM vornehmen kann. Ich habe mir mittels "SSH-SessionsPSv3" auch schon was gebaut, um via ssh eine Verbindung zum CMM herzustellen. Allerdings werden offenbar alle gesendeten Kommandos in einem neuen Kontext gestartet. Wie lässt sich das umgehen oder welcher andere ssh-Client kann Befehlsfolgen in einem Kontext senden?   (idealerweise so, wie pexpect das unter Python kann)

    Bezüglich "Kontext" meine ich sowas hier: per Default stehe ich in "~/", schicke ich dann ein RunCommand("cd /") und als nächsten Befehl ein RunCommand("ls -l"), bekomme ich nicht den Inhalt von "/" sondern den von "~". ...weil jeder RunCommand einzeln läuft.

    Bei einem normalen Linux-System könnte ich die Befehle per Semikolon getrennt in einem RunCommand auf die Reise schicken. Leider geht das beim CMM nicht.

    Konkret muss ich z.B. erstmal ein "env -T system:blade[11]" zum CMM schicken, um auf den Service-Prozessor des elften Blades umzuschalten. Alle folgenden Befehle beziehen sich dann auf das elfte Blade - so lange, bis ich per "env -T ....." auf eine andere Komponente umschalte.

    Oder noch konkreter...mein PS-Script liefert:

    PS C:\tst> .\ssh_tst1.ps1
    system> env -T system:blade[11]
    OK
    system> ifconfig
    Command cannot be issued to this target.  Type env -h for help on changingtargets.

    Es soll aber so aussehen (via Putty):

    system> env -T system:blade[11]
    OK
    system:blade[11]> ifconfig
    eth1
    -up/down Not Available
    [...zig weitere Zeilen...]
    Dienstag, 19. Januar 2016 15:23

Antworten

Alle Antworten

  • Ein anderer Ansatz. Das IBM Flex CMM kann CIM. Powershell hat eine native Schnittstelle für CIM. 

    Eventuell kannst du damit deine Lösung leichter realisieren. 

    CMM management options


    Kind regards, Flo


    Dienstag, 19. Januar 2016 15:54
  • Hallo Florian,

    vielen Dank für die Idee. Hast du Doku oder vielleicht sogar ein paar Scripts zu dem Thema? (Powershell mit CMM und IMM2)

    Meine ersten Ansätze, diesbezügliche Infos zu finden, waren eher erfolglos. Infos, wie man den Support dafür an- oder abschaltet, waren noch zu finden, aber ansonsten nix. Also so in der Richtung: wie verbinde ich mich mit welchen Credentials, welche Attribute gibt es, sind sie read-only.....

    Daher ist mein jetziges Gefühl dazu eher, dass ich mit dem CIM-Ansatz vom Regen in die Traufe komme ;-)

    Dienstag, 19. Januar 2016 16:40
  • Hallo,

    um über SSH auf Linux, Unix, .. System zuzugreifen, nutze ich immer die "Renci.SshNet.dll".

    sieh dir mal folgende links an:

    https://sshnet.codeplex.com/

    http://vwiki.co.uk/SSH_Client_(PowerShell)#Renci_SSH.NET

    hier ein kurzer Code:

    [Reflection.Assembly]::LoadFile("$PSScriptRoot\Renci.SshNet.dll")
    $SshClient = New-Object Renci.SshNet.SshClient($ComputerName, $Port, $Username, $Password)
    $SshClient.Connect()
    $SshSessions = @{}
    $SshSessions.$ComputerName = $SshClient
    $CommandObject = $SshSessions.$ComputerName.RunCommand($RemoteCommand)
    $CommandObject.Dispose()
    $CommandObject = $null

    Um mehrere Befehle hintereinander abzusetzen, musst du sie mit ; trennen

    z.B:

    "cd .. ; ls"

    Lg


    • Bearbeitet Schlieng Donnerstag, 21. Januar 2016 07:57
    Donnerstag, 21. Januar 2016 07:54
  • Hallo Schlieng,

    das von mir verwendete "SSH-SessionsPSv3" nutzt genau die von dir genannte DLL.

    Und die Trennung von Befehlen mit Semikolon funktioniert auf dem CMM (wie bereits im ursprünglichen Post geschrieben) leider nicht. Also sowas hier

    $res=$SshSessions.$SysName.RunCommand("env -T system:blade[11]; ifconfig").Result

    ...liefert eine Fehlermeldung.

    In der Doku zu Posh-SSH wird das selbe Verhalten sogar als Sicherheits-Feature gennant:  ;-)
    "In the case of Linux/Unix systems when the command string is given to the shell, the instance is closed so it will retain the state because the shell instance is closed after each execution."

    Donnerstag, 21. Januar 2016 09:36