通过 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 gitexec \$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 隧道连接到远程主机?

脚本_使用expect自动交互远程主机安装软件

使用 Python 通过 SSH 隧道连接到远程 PostgreSQL 数据库

我如何通过 ssh 连接到谷歌合作虚拟机?