2015-03-26 5 views
0

После того, как travis завершается и успешно, я пытаюсь запустить скрипт bash, который я довольно новичок.Bash script login to ssh и запускать некоторые команды

Я в принципе хочу, чтобы войти в систему на удаленном сервере и получил тянуть от главного отделения на мерзавца, а затем перезапустить сервер Node.js

spawn ssh [email protected]********* -o StrictHostKeyChecking=no 
expect "assword:" 
send "*******\r" 
cd localer 
forever stop server.js 
git pull origin master 
forever start server.js 
exit 

Это то, что я до сих пор, но это дает мне ошибка на Travis-CI

./deploy.sh: line 1: spawn: command not found 
couldn't read file "assword:": no such file or directory 
./deploy.sh: line 3: send: command not found 
./deploy.sh: line 4: cd: localer: No such file or directory 
./deploy.sh: line 5: forever: command not found 
From git://github.com/******* 
* branch   master  -> FETCH_HEAD 
Already up-to-date. 
./deploy.sh: line 7: forever: command not found 

Я установил ожидать в среде Travis, но он говорит, отправлять и икру не известны пакеты, так что я предполагаю, что они просто Баш свойства.

Надеется, что вы можете помочь :)

+0

Это смесь оболочки и ожидать там. Если вы пытаетесь использовать ожидание, вам нужно написать сценарий ожидания (строки вверх через 'send'), а затем отправить команды (строки от' cd' до конца) на вызванный процесс. –

+0

@ EtanReisner что-то вроде этого тогда? http://pastebin.com/0Usz0htV – Adam91Holt

+0

Вероятно, вы хотите дождаться приглашения перед отправкой, но да, что-то вроде этого, я думаю. –

ответ

1

ли это так в конце концов

#!/usr/bin/expect -f 
spawn ssh [email protected]*************** -o StrictHostKeyChecking=no 
expect "assword:" 
send "*******\r" 
set prompt {\$ $} 
expect -re $prompt 
send "cd localer\r" 
expect -re $prompt 
send "forever stop server.js\r" 
expect -re $prompt 
send "git pull origin master\r" 
sleep 10 
expect -re $prompt 
send "forever start server.js\r" 
expect -re $prompt 
send "exit\r" 
expect eof 
1

Почему вы не используете ключи SSH?

на локальном компьютере, запустите ssh-keygen, после завершения процесса, получают содержание ~/.ssh/id_rsa.pub, войдите на удаленном сервере, мимо содержания в ~/.ssh/authorized_keys

Перелогиньтесь и попробуйте войти снова. Вам не будет предложено ввести пароль еще раз (что гораздо лучше, если бы она хранится в простом в сценарии), и теперь вы можете использовать этот синтаксис для выполнения удаленных команд:

ssh [email protected] "set -x; cd .; pwd; ls -lah; any command you want"

+0

Проблема с travis-ci, ключ ssh будет другим ключом ssh каждый раз? – Adam91Holt

+0

Hm ... собственно прямая командная строка, вероятно, может быть использована даже в исходном случае. Неплохо подмечено. –

0

Это действительно не хорошая идея поместить открытые пароли в текстовые файлы.

Настройка SSH public/private keys, то вы можете просто перенаправить локальный скрипт в SSH, как так, чтобы запустить сценарий удаленно:

SSH пользователь @ машина "Баш -ную < local_script.sh

Смежные вопросы