136430
Goto Top

Neustart mehrerer Geräte

Hallo zusammen,

ich kann in Linux nur die basics und schalte mich öfters mit putty auf einen von mehreren Linux Maschinen, initiiere einen neustart oder fahre diese herunter und zwar von Windows aus.

Ich suche eine Lösung wie ich das für mehrere Linux Maschinen von meinem Windows-Rechner aus tun kann und frage euch um Rat. Anfangs muss ich mich natürlich über putty einloggen, ich dachte an ein Script, allerdings sind meine Kentnisse begrenzt und frage euch um Rat was die einfachste Lösung wäre.

Content-Key: 383214

Url: https://administrator.de/contentid/383214

Ausgedruckt am: 28.03.2024 um 08:03 Uhr

Mitglied: Kraemer
Kraemer 13.08.2018 um 08:31:14 Uhr
Goto Top
Moin,


Zitat von @136430:
und frage euch um Rat was die einfachste Lösung wäre.
ein Script.

Gruß

https://www.thomasmaurer.ch/2016/04/using-ssh-with-powershell/
Mitglied: 129580
129580 13.08.2018 um 08:59:36 Uhr
Goto Top
Moin,

falls du's mit Scripten nicht hast, dann könntest du das alternativ mit einem Automatisierungswerkzeug z.B. Ansible durchführen.

VG
Exception
Mitglied: 136430
136430 13.08.2018 aktualisiert um 09:24:44 Uhr
Goto Top
Hi Kraemer,

danke für den Tipp, habe es mir geholt und mit einer Maschine bereits eine SSH Verbindung aufgebaut, restartbefehl etc. alles hat geklappt!

aber wie würde ich denn ein powershellscript für mehrere Maschinen basteln?

ich habe da an folgendes geschrieben bekomme aber nur fehlermeldungen:

$PC= "192.168.1.1", "192.168.1.2"
Invoke-sshsession -ComputerName $PC -Credential root
invoke-sshcommand -sessionID 0 -command "uname -a"
$stream = new-sshshellstream -index 0
$stream.writeline("sudo shutdown -r now")


bekomme dann diesen Fehler:

Add-Member : Das Argument kann nicht an den Parameter "InputObject" gebunden werden, da es NULL ist.
In C:\Program Files\WindowsPowerShell\Modules\Posh-SSH\2.0.2\Posh-SSH.psm1:666 Zeichen:33

back-to-topAdd-Member -InputObject $stream -MemberType NoteProperty -Nam ...

back-to-top~~~~~~~

+ CategoryInfo : InvalidData: (face-smile [Add-Member], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.AddMemberCommand

Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\Users\goak\Desktop\raspberrys_neustarts.ps1:5 Zeichen:1

back-to-top$stream.writeline("sudo shutdown -r now")

back-to-top~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo : InvalidOperation: (face-smile , RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Mitglied: 136430
136430 13.08.2018 um 09:24:07 Uhr
Goto Top
ich habe es mit diesem powershell script probiert, aber das ging völlig in die Hose

$PC= "192.168.1.1", "192.168.1.2"
Invoke-sshsession -ComputerName $PC -Credential root
invoke-sshcommand -sessionID 0 -command "uname -a"
$stream = new-sshshellstream -index 0
$stream.writeline("sudo shutdown -r now")

ich würde es schon gerne als script haben, wo ist da mein Fehler?
Mitglied: 129580
129580 13.08.2018 aktualisiert um 12:31:29 Uhr
Goto Top
Hallo,

erstmals würd ich dich bitten Ausgaben in Code Formatierung hier zu posten. Siehe im Editor den Button "</>". Dann ist das deutlich übersichtlicher.

Invoke-sshsession -ComputerName $PC -Credential root
invoke-sshcommand -sessionID 0 -command "uname -a"

Du kannst nicht für mehrere Hosts ein und die selbe SSH Verbindung aufbauen/nutzen.
Probiers mal damit:

$cred = Get-Credential
$hosts= "192.168.1.1", "192.168.1.2"  

foreach ($server in $hosts)
{
        $con = New-SSHSession -ComputerName $server -Credential $cred
        Invoke-SSHCommand -Index $con.SessionId -Command "sudo shutdown -r now"  
}

Edit: Gerade auf Github gesehen, dass der ComputerName Parameter ein String Array akzeptiert. Dennoch sollte er dir pro Host eine separate SSH Verbindung anlegen. Somit musst du beim Invoke-SSHCommand die Sitzung mithilfe der Session ID (Index) bestimmen. Oder du übergibst die erstellte Sitzung mithilfe der Pipeline an Invoke-SSHCommand.

New-SSHSession -ComputerName $hosts -Credential $cred | Invoke-SSHCommand -Command "sudo shutdown -r now"  


VG
Exception
Mitglied: 136430
136430 13.08.2018 um 10:27:28 Uhr
Goto Top
Ok werde ich machen

ich erhalte beim Ausführen des Scripts folgende Fehlermeldung (führe alles mit Admin aus)

Cmdlet Get-Credential an der Befehlspipelineposition 1
Geben Sie Werte für die folgenden Parameter an:
Die Variable "Host" kann nicht überschrieben werden, da sie konstant oder schreibgeschützt ist.  
In C:\Users\admin\Desktop\linux_neustarts.ps1:4 Zeichen:10
+ foreach ($host in $hosts)
+          ~~~~~
    + CategoryInfo          : WriteError: (Host:String) , SessionStateUnauthorizedAccessException
    + FullyQualifiedErrorId : VariableNotWritable
Mitglied: 129580
Lösung 129580 13.08.2018 aktualisiert um 10:48:00 Uhr
Goto Top
Oh Pardon! $host ist eine vordefinierte schreibgeschütze Variable von der Powershell xD
Habs mal korrigiert...

$cred = Get-Credential
$hosts= "192.168.1.1", "192.168.1.2"  

foreach ($server in $hosts)
{
        $con = New-SSHSession -ComputerName $server -Credential $cred
        Invoke-SSHCommand -Index $con.SessionId -Command "sudo shutdown -r now"  
}
Mitglied: Henere
Henere 14.08.2018 aktualisiert um 02:50:22 Uhr
Goto Top
Warum so umständlich ?

PLINK tut seinen Dienst einwandfrei. So fahr ich mein NAS runter, wenn der USV die Puste ausgeht.

plink.exe -pw 08154711 admin@host poweroff

Geht auch mit reboot oder was auch immer.

Hier die Syntax:

C:\>plink
Plink: command-line connection utility
Release 0.67
Usage: plink [options] [user@]host [command]
       ("host" can also be a PuTTY saved session name)  
Options:
  -V        print version information and exit
  -pgpfp    print PGP key fingerprints and exit
  -v        show verbose messages
  -load sessname  Load settings from saved session
  -ssh -telnet -rlogin -raw -serial
            force use of a particular protocol
  -P port   connect to specified port
  -l user   connect with specified username
  -batch    disable all interactive prompts
  -sercfg configuration-string (e.g. 19200,8,n,1,X)
            Specify the serial configuration (serial only)
The following options only apply to SSH connections:
  -pw passw login with specified password
  -D [listen-IP:]listen-port
            Dynamic SOCKS-based port forwarding
  -L [listen-IP:]listen-port:host:port
            Forward local port to remote address
  -R [listen-IP:]listen-port:host:port
            Forward remote port to local address
  -X -x     enable / disable X11 forwarding
  -A -a     enable / disable agent forwarding
  -t -T     enable / disable pty allocation
  -1 -2     force use of particular protocol version
  -4 -6     force use of IPv4 or IPv6
  -C        enable compression
  -i key    private key file for user authentication
  -noagent  disable use of Pageant
  -agent    enable use of Pageant
  -hostkey aa:bb:cc:...
            manually specify a host key (may be repeated)
  -m file   read remote command(s) from file
  -s        remote command is an SSH subsystem (SSH-2 only)
  -N        don't start a shell/command (SSH-2 only)  
  -nc host:port
            open tunnel in place of session (SSH-2 only)
  -sshlog file
  -sshrawlog file
            log protocol details to a file