通过 ssh 连接到远程并使用 expect 运行 git 命令
Posted
技术标签:
【中文标题】通过 ssh 连接到远程并使用 expect 运行 git 命令【英文标题】:Connect to remote via ssh and run git commands with expect 【发布时间】:2018-09-14 08:00:12 【问题描述】:我正在编写“假部署”bash 脚本,我想运行它来拉取服务器上的最新主服务器。我有以下脚本:
#!/usr/bin/expect -f
spawn ssh -t user@host.domain 'cd path/to/dir'
expect "continue"
sleep 1
send "yes\r"
expect "assword:"
sleep 1
send "password\r"
# Commands for remote
git pull origin master
expect "sername"
sleep 1
send "username\r"
expect "assword"
sleep 1
send "password\r"
interact
连接成功,但是运行git pull origin master
时,会触发错误:invalid command name "git"
。
我可能应该以不同的方式运行命令,不幸的是,我不确定如何。我如何能够在遥控器上运行“远程命令”? 提前致谢。
【问题讨论】:
机器上安装了git吗?这个错误意味着它没有...... 感谢您的评论。 Git 肯定安装在那里,因为当我手动执行时,我完全能够使用 git 命令。我想问题可能是在建立连接后,命令在一些奇怪的环境中运行(而不是直接在终端内)。但是我这辈子第三次编写 bash 脚本了,所以我不确定。 不管你的 git 命令本身有什么问题,你为什么要使用 expect?您可以使用 ssh 密钥:help.github.com/articles/connecting-to-github-with-ssh 或个人访问令牌:help.github.com/articles/…,您完全不必使用期望。 【参考方案1】:ssh
会让您在远程主机端使用标准受限的PATH
。
如果git
未安装在/usr/bin
中,您可能需要修改脚本才能写入git
可执行文件的完整路径。
【讨论】:
which git
输出它安装在/usr/bin
中。我想可能还有其他问题。奇怪的是消息invalid command name
。通常,当您尝试执行不存在的命令时,它会显示-bash: "command" : command not found
@DawidZbiński which git
在exec \$SHEL
之后完成时?
对不起,我没有更新代码。在这里,更新版本。我在手动登录后尝试运行which git
。它提供了正确的路径/usr/bin/git/
。我仍然想知道为什么错误消息如此奇怪。如果找不到该命令,可能应该用command not found
响应,但它会用invalid command name
响应。
我在git pull origin master
命令之前添加了which git
。它也会回复invalid command name 'which'
。
@DawidZbiński 这是否类似于***.com/q/16212628/6309?还有askubuntu.com/a/959662/5470.以上是关于通过 ssh 连接到远程并使用 expect 运行 git 命令的主要内容,如果未能解决你的问题,请参考以下文章
python PYTHON / SSH:连接到远程服务器并运行命令
在 Mac 终端中使用 PPK 文件通过 SSH 连接到远程连接 [关闭]
如何使用 Fabric 通过 2 个网关将 SSH 隧道连接到远程主机?