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属性。
希望你能提供帮助:)
答案 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