Bash 脚本登录到 ssh 和 运行 一些命令
Bash script login to ssh and run some commands
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 属性。
希望你能帮忙:)
最后是不是这样
#!/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
你为什么不使用 ssh 密钥?
在您的本地计算机上,运行 ssh-keygen
,完成该过程后,获取 ~/.ssh/id_rsa.pub
的内容,登录您的远程服务器,将 [= 中的内容传递过去12=]
现在注销并尝试重新登录。系统不会再次提示您输入密码(最好将其以普通方式存储在脚本中),现在您可以使用此语法来 运行 远程命令:
ssh user@host "set -x; cd .; pwd; ls -lah; any command you want"
将明文密码放入文本文件确实不是一个好主意
设置 SSH public/private keys,然后您可以像这样简单地将本地脚本重定向到 ssh 到 运行 远程脚本:
ssh 用户@机器 'bash -s' < local_script.sh
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 属性。
希望你能帮忙:)
最后是不是这样
#!/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
你为什么不使用 ssh 密钥?
在您的本地计算机上,运行 ssh-keygen
,完成该过程后,获取 ~/.ssh/id_rsa.pub
的内容,登录您的远程服务器,将 [= 中的内容传递过去12=]
现在注销并尝试重新登录。系统不会再次提示您输入密码(最好将其以普通方式存储在脚本中),现在您可以使用此语法来 运行 远程命令:
ssh user@host "set -x; cd .; pwd; ls -lah; any command you want"
将明文密码放入文本文件确实不是一个好主意
设置 SSH public/private keys,然后您可以像这样简单地将本地脚本重定向到 ssh 到 运行 远程脚本:
ssh 用户@机器 'bash -s' < local_script.sh