função bash com ssh

1

Estou apenas começando a bater pela primeira vez.

Como eu executaria uma função no servidor nesse escopo? O status do drush também é algo que está no servidor sendo conectado ao ssh.

#!/bin/bash

function test {
    drush status
}

function connect {
    ssh user@serveraddress 'test'

}

connect

Eu entendo que você precisa colocar o código remoto no ssh user @ server 'código aqui', no entanto coisas complicadas se confundem com todas as '"etc. Por exemplo, isso deve ecoar todos os nomes do servidor db.

function connect {


    ssh user@serveraddress 
   '

    dbuser=user
    dbpass=pass
    DBS='mysql -u$dbuser -p$dbpass -Bse 'show databases'| egrep -v 'information_sch$
    for db in $DBS; do
        echo "DB name -  $db"
    done

    '   
}


connect

Qualquer link de ajuda é apreciado, felicidades

    
por imp 23.12.2011 / 07:53

3 respostas

4

Você pode usar aqui-documentos:

ssh user@serveraddress <<"END"
dbuser=user
dbpass=pass
DBS=$(mysql -u$dbuser -p$dbpass -Bse 'show databases'| egrep -v 'information_sch$')
for db in $DBS; do
    echo "DB name -  $db"
done
END

Veja: link

    
por 23.12.2011 / 08:22
2

Você não pode simplesmente colocar seu script no host remoto e usar o ssh para executá-lo

ssh [email protected] /path/to/script

Ou se o seu script não requer parâmetros de linha de comando, o ypu pode fazer isso

cat script | ssh [email protected]

EDITAR:

Depois de mais algumas pesquisas, esta é provavelmente uma solução melhor em todo o mundo

ssh [email protected] 'bash -s' <script 

ou

ssh [email protected] 'bash -s' <script param1 param2

If the -s option is present, or if no arguments remain after option processing, then commands are read from the standard input. This option allows the positional parameters to be set when invoking an interactive shell.

    
por 23.12.2011 / 10:24
0

de outra forma ...

function connect {

    dbuser=user
    dbpass=pass
    DBS='ssh user@serveraddress "mysql -u$dbuser -p$dbpass -Bse 'show databases'"|egrep -v 'information_sch$''
    for db in $DBS; do
        echo "DB name -  $db"
    done

}

Em outras palavras: Somente execute o código mais necessário na máquina remota, o restante local. Ou - não use backticks:

function connect {

    dbuser=user
    dbpass=pass
    ssh user@serveraddress "mysql -u$dbuser -p$dbpass -Bse 'show databases'" \
    |egrep -v 'information_sch$' \
    |while read db; do
        echo "DB name -  $db"
    done

}
    
por 23.12.2011 / 10:40

Tags