Bash脚本登录到ssh并运行一些命令

时间:2015-03-26 01:43:44

标签: git bash ssh travis-ci

travis完成并成功之后我正在尝试运行一个我很陌生的bash脚本。

我基本上希望它登录到远程服务器并从git上的master分支中获取,然后重新启动node.js服务器

spawn ssh couch@********* -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环境中安装了expect,但它说send和spawn不是已知的包,所以我认为它们只是bash属性。

希望你能提供帮助:)

3 个答案:

答案 0 :(得分:1)

最后是这样吗

#!/usr/bin/expect -f
spawn ssh couch@*************** -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 :(得分:1)

为什么不使用ssh密钥?

在本地计算机上运行ssh-keygen,完成此过程后,获取~/.ssh/id_rsa.pub的内容,登录远程服务器,超过~/.ssh/authorized_keys中的内容

现在注销并尝试再次登录。您再也不会被提示输入密码(在脚本中以明文形式存储它会好得多),现在您可以使用此语法运行远程命令:

ssh user@host "set -x; cd .; pwd; ls -lah; any command you want"

答案 2 :(得分:0)

将明文密码放入文本文件中真的不是一个好主意。

设置SSH public/private keys,然后您可以简单地将本地脚本重定向到ssh,以便远程运行脚本:

ssh user @ machine'bash -s'< local_script.sh

相关问题