# [bash] Telnet oder SSH Login via Shellscript

## 3PO

Hallo Zusammen,

ich möchte mit einem Script Telnebefehle auf einem Remote-PC ausführen.

Nach etwas Recherche habe ich im I-Net folgenden Lösungsansatz gefunden:

```
#!/bin/sh 

IP="192.168.178.10"

USER="root"

PASS="xxxxx"

( echo $USER 

  sleep 1 

  echo $PASS 

  sleep 1

  echo "<MEINE_BEFEHLE>" ) | telnet $IP
```

So weit, so gut, - das einloggen funktioniert, leider aber werden die Befehle nicht abgearbeitet.

Hat Jemand eine Idee wo der Fehler liegen könnte?

Ich bin auch für andere Lösungsvorschläge offen, es muss nicht unbedingt Telnet sein, evtl. auch SCP.Last edited by 3PO on Wed May 20, 2009 1:32 pm; edited 1 time in total

----------

## schachti

Ich würde das über ssh machen - mit Public Key Authentication kannst Du Dir dann die Angabe eines Passworts sparen. Außerdem kannst Du ssh direkt den auszuführenden Befehl mitgeben, zum Beispiel so:

```

ssh user@host ps aux

```

Mehrere Befehle kannst Du jeweils durch ein Semikolon trennen (wenn Du die Befehlsfolge quotest):

```

ssh user@host 'ps aux; free'

```

oder

```

ssh user@host ps aux\; free

```

----------

## 3PO

Danke für den Tipp, funktioniert einwandfrei.

Auf die Idee mir der Public Key Authentication währe ich warscheilich nie gekommen...   :Laughing: 

----------

## think4urs11

und wenn du jetzt auch noch plink (gehört zu putty) benutzt kannst du sogar eine ganze Latte Befehle in ein textfile packen und dieses als Input übergeben - etwas hübscher als alles in eine ellenlange Befehlszeile zu packen (kein Quotinggewürge usw.)

----------

## 3PO

@ Think4UrS11

Ich habe das mal so gelöst:   :Idea: 

```
#!/bin/sh 

IP="192.168.178.10" 

USER="root" 

 

( <Befehl 1> 

  <Befehl 2> 

  <Befehl 3>

  <Befehl 4>

  <Befehl .... >

   exit ) | ssh $USER@$IP
```

Damit habe ich auch keine "ellenlange Befehlszeile zu packen (kein Quotinggewürge usw.)"  :Wink: 

BTW:

plink  :Question:  <-- Gibt es das auch für Linux? - Ich kenne das nur für Windows.

----------

## Hollowman

Wieso macht ihr das so umständlich? Wenn das immer wieder das selbe ist schreibt ma nen Bash Script und pack das auf den Server. Das kann man dann per SSH oder Cron anschubsen. Da kann man sich das ganze gequote auch sparen. Und vorallem kann man es von jedem Rechner aus anschubsen und nicht nur von einem aus.

Sebastian

----------

## 3PO

 *Hollowman wrote:*   

> Wieso macht ihr das so umständlich? Wenn das immer wieder das selbe ist schreibt ma nen Bash Script und pack das auf den Server. Das kann man dann per SSH oder Cron anschubsen. Da kann man sich das ganze gequote auch sparen. Und vorallem kann man es von jedem Rechner aus anschubsen und nicht nur von einem aus.
> 
> Sebastian

 

Einfach deshalb, weil sich die auszuführenden Befehle ändern können!

----------

## think4urs11

 *3PO wrote:*   

> plink  <-- Gibt es das auch für Linux?

 Ist nur einen Mausklic^Wemerge-Aufruf entfernt  :Wink: 

 *3PO wrote:*   

> Damit habe ich auch keine "ellenlange Befehlszeile zu packen (kein Quotinggewürge usw.)" 

 soweit so richtig, aber ich persönlich finde es eben ganz angenehm wenn ich ein textfile 'sourcen' kann in dem ausschließlich die Befehle stehen die auf dem Zielsystem anzuwenden sind. Auf die Art kann auch $Cisco-Admin so ein File erstellen ohne auch nur 0.1 Sekunden Extragehirnarbeit in Quoting/Einklammerung/sonstwas zu investieren.

 *Hollowman wrote:*   

> Wieso macht ihr das so umständlich? Wenn das immer wieder das selbe ist schreibt ma nen Bash Script und pack das auf den Server.

 Wenn ich nun aber z.B. Zielsysteme habe auf denen 'mal eben ein Script abspeichern' schlicht nicht möglich ist - diverse Appliances beispielsweise - dann ist das hier genannte eine sehr elegante Möglichkeit.

Oder aber 'wir sollten dringend mal endlich auf den 100+ Switches Feature xyz aktivieren' oder oder ...

----------

## 3PO

 *Think4UrS11 wrote:*   

>  *3PO wrote:*   plink  <-- Gibt es das auch für Linux? Ist nur einen Mausklic^Wemerge-Aufruf entfernt ...

 

Hmmm...,

das kam dann wohl mit putty mit.  :Embarassed: 

.. denn einzeln gibt es das wohl nicht:

```
vdr02 ~ # eix plink

* games-strategy/uplink [1]

     Available versions:  ~1.53!m!s

     Homepage:            http://www.uplink.co.uk/

     Description:         Uplink is a commercial hacking strategy game.

* sci-biology/plink

     Available versions:  ~1.05 {webcheck}

     Homepage:            http://pngu.mgh.harvard.edu/~purcell/plink/

     Description:         Whole genome association analysis toolset

[1] (layman/drizzt-overlay)

Found 2 matches.

vdr02 ~ # 
```

Ich hatte das unter Linux noch nie verwendet, das es ja da bash gibt...  

```
vdr02 ~ # plink

PuTTY Link: command-line connection utility

Release 0.60

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

            force use of a particular protocol

  -P port   connect to specified port

  -l user   connect with specified username

  -batch    disable all interactive prompts

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 authentication

  -noagent  disable use of Pageant

  -agent    enable use of Pageant

  -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)

vdr02 ~ #
```

----------

## think4urs11

 *3PO wrote:*   

> das kam dann wohl mit putty mit. 

 deswegen hatte ich ja auch '...(gehört zu putty)...' mit hingeschrieben  :Wink: 

----------

## 3PO

 *Think4UrS11 wrote:*   

>  *3PO wrote:*   das kam dann wohl mit putty mit.  deswegen hatte ich ja auch '...(gehört zu putty)...' mit hingeschrieben 

 

Mit plink sollte dann aber auch telnet funktionieren - vorausgesetzt das putty entsprechend konfiguriert ist.

----------

