Kleines Bash Skript

Coolzero82

Lt. Junior Grade
Registriert
Okt. 2011
Beiträge
308
Hallo,
ich brauche ein kleines Bash Skript, welches von der Tastatur einen User, ein PW und eine IP abfragt und dann mit diesen Daten eine SSH verbindung aufbaut, allerdings habe ich das bis jetzt nicht geschafft.

Mein versuch sieht so aus:
Code:
#!/bin/bash
read User
read PW
read IP


Server=IP
User=User
Passwort=PW

ssh $User:$PW@$IP
 
Wo hast du her, dass "ssh user:password@server" funktioniert? Lauf Manpage zu ssh ist das so nicht zulässig.

Und noch schlimmer, wieso willst du das in ein Script packen? ssh user@server:port und danach gibt es ne Passwortabfrage für den Server bzw. besser eine Passwortabfrage für den Schlüssel. Mit deinem Script baust du da keinerlei Komplexität ab.
 
Ok, mit dem PW habt ihr natürlich recht, keine Ahnung wie ich darauf komme. hab es jetzt in User@ip geändert, allerdings kommt keine Abfrage der Daten für die Variable und auch keine Abfrage des PW.

Das skript würde dann ja noch weitergehen, wollte es nur erstmal bis dahin am laufen haben
 
das

Code:
#!/bin/bash

read -p "ip: " ip
read -p "user: " user
read -p "pwd: " pwd

echo $ip $user $pwd

ergibt das

Code:
# ./test.sh
ip: 1.2.3.4
user: foo
pwd: bar
1.2.3.4 foo bar

jetzt würde es z.b. mit sshpass weitergehen
 
So funktioniert sshpass leider nicht
Code:
sshpass -p '$pwd'  $user@$ip
 
Code:
#!/bin/bash
read -p "ip: " ip
read -p "user: " user
read -p "pwd: " pwd

sshpass -p $pwd ssh $user@$ip

kennt ssh den remote host noch nicht, dann bricht sshpass stillschweigend ab. du musst dann den returncode checken (variable "$?") oder du benutzt "ssh -oStrictHostKeyChecking=no", was natürlich unsicherer ist.
 
Ok, das funktioniert jetzt schonmal, jetzt wollte ich gerne nach demm ssh login die powershell ausführen, da passiert aber leider nichts.
Also die ssh verbindung wird hergestellt, allerdings wird die Powershell nicht automatisch gestartet
Code:
#!/bin/bash
 
read -p "ip: " ip
read -p "user: " user
read -p "pwd: " pwd
 
# echo $ip $user $pwd

sshpass -p $pwd ssh $user@$ip

powershell
 
du willst die powershell über ssh auf dem remote host starten? probier mal

Code:
sshpass -p $pwd ssh $user@$ip powershell

dein script startet auf ssh und powershell jeweils auf dem lokalen rechner; das beispiel oben besagt, dass über ssh powershell auf dem remote host gestartet werden soll.
 
Hi, damit startet die Powershell jetzt richtig, hab das Skript dann nochmal erweitert um verschiedene System Paramter abzufragen, allerdings wird nach dem Powershell start nichts mehr abgearbeitet

Code:
#!/bin/bash
 
read -p "ip: " ip
read -p "user: " user
read -p "pwd: " pwd
 
# echo $ip $user $pwd

sshpass -p $pwd ssh -t $user@$ip powershell

Foreach ($s in $servers) 
{   
$CPUInfo = Get-WmiObject Win32_Processor -ComputerName $s #Get CPU Information 
$OSInfo = Get-WmiObject Win32_OperatingSystem -ComputerName $s #Get OS Information 
#Get Memory Information. The data will be shown in a table as MB, rounded to the nearest second decimal. 
$OSTotalVirtualMemory = [math]::round($OSInfo.TotalVirtualMemorySize / 1MB, 2) 
$OSTotalVisibleMemory = [math]::round(($OSInfo.TotalVisibleMemorySize  / 1MB), 2) 
$PhysicalMemory = Get-WmiObject CIM_PhysicalMemory -ComputerName $s | Measure-Object -Property capacity -sum | % {[math]::round(($_.sum / 1GB),2)} 
$infoObject = New-Object PSObject 
#The following add data to the infoObjects. 
Add-Member -inputObject $infoObject -memberType NoteProperty -name "ServerName" -value $CPUInfo.SystemName 
Add-Member -inputObject $infoObject -memberType NoteProperty -name "CPU_Name" -value $CPUInfo.Name 
Add-Member -inputObject $infoObject -memberType NoteProperty -name "CPU_Description" -value $CPUInfo.Description
 
das problem ist, dass deine powershell kommandos nicht in der interaktiven powershell landen, die du per ssh gestartet hast. du müsstest in den stdin des prozesses schreiben bzw. aus dessen stdout lesen. da kann ich dir mit der bash leider nicht weiterhelfen...
 
Zuletzt bearbeitet:
Ich kann nur halbwegs für Linux helfen und nicht mit der Powershell. Zumindest ist das Absetzen auch längerer Befehlsketten via SSH normalerweise kein Problem siehe:

https://www.cyberciti.biz/tips/linux-running-commands-on-a-remote-host.html
https://www.cyberciti.biz/faq/linux-unix-osx-bsd-ssh-run-command-on-remote-machine-server/

Ich bin aber raus, inwieweit sich das auch auf SSH via Powershell auf Windowskisten auswirkt. (<- SSH via Powershell auf Windows, kommt mir immer noch komisch vor :D)


Ansonsten fürs i-Tüpfelchen:
*Passwörter im Klartext auf die Console zu schmeißen ist schlechter Stil. Also generell Klartestpasswörter auf den Bildschirm zu werfen..
*Anstatt Passwörter zu nehmen RSA Schlüssel nutzen. Passwortlogins per SSH nach Möglichkeit deaktivieren.
 
Hi,
erstmal danke für die Hilfe. Das mit den Klarsicht PW ist mir klar, allerdings übe ich grade, deshalb stört es mich noch nicht :-)

Vieleicht habt ihr ja einen anderen Ansatz für mich, also mir geht es grundsätzlich darum von meinem Linux Rechner automatisch diverse Infos von meinem WinServer 2008 remote abzurufen, wie z.b. welche CPU verbaut ist, wie die Ram auslastung ist etc.

Daher war die idee über ssh auf dem WinServer die Powershell zu öffnen und dann halt die diversen Parameter abzurufen.

Würde mich über vorschläge freuen:-)

Nochmal vielen Dank bis hier hin
 
Coolzero82 schrieb:
Daher war die idee über ssh auf dem WinServer die Powershell zu öffnen und dann halt die diversen Parameter abzurufen.
Ich hatte neulich den Fall, wo ich ein externes Programm aufrufen und deren Ausgabe analysieren musste und könnte daher ein Snippet posten.

Ist allerdings in Racket geschrieben und daher weiß ich nicht, ob und wie viel Dir das weiter hilft.
 
andy_m4 schrieb:
Ich hatte neulich den Fall, wo ich ein externes Programm aufrufen und deren Ausgabe analysieren musste und könnte daher ein Snippet posten.

Ist allerdings in Racket geschrieben und daher weiß ich nicht, ob und wie viel Dir das weiter hilft.

Hi, danke für das Angebot, allerdings kenne ich Racket überhaupt nicht
 
Wenn es nur zum üben ist, warum nutzt du dann einen 2008er Server?
Was spricht gegen einen 2012, 2012 R2 oder gar 2016er als Evaluierungsversion?
Dann könntest du versuchen Powershell Web Access zu verwenden.
Allerdings frage ich mich noch, welches Ziel du verfolgst, dass du unbedingt von einer Linux Kiste aus den alten Win Server zum testen nach seiner CPU oder RAM Auslastung fragen musst.
Vielleich gibt es ja elegantere Lösungen für dein eigentliches Problem?
 
Zurück
Oben