在通过 SSH 连接到客户机后继续 shell 脚本执行?

Continuing shell script execution after SSHing into guest machine?

我使用 Vagrant 和 VirtualBox 在我的 Windows 主机上设置了一个 Ubuntu 来宾框。我正在尝试编写一个 shell 脚本,它将...

  1. vagrant up
  2. vagrant ssh一旦vagrant up完成
  3. cd 一旦成功通过 SSH 进入来宾机器,进入来宾机器的特定项目目录

现在我的 vagrant_shell_script.sh 文件包含以下内容:

vagrant up && vagrant ssh && echo 'cd vagrant/rails_tutorial/sample_app'

当我在 Git Bash 中执行它时一切正常,包括通过 SSH 连接到来宾计算机,但是在成功连接后,脚本似乎停止工作并且确实不执行最后的 cd 命令。我想这是因为它不再能够通过那个特定的 Bash 实例直接与我的主机通信(如果我错了请纠正我)。

有什么方法可以让它在SSH连接成功后直接导航到目标目录吗?

如果这是一个愚蠢的问题,请原谅我——对于 bash 脚本编写而言相对较新。

This solved it. 有点乱,但是 运行

vagrant up && vagrant ssh -- -t 'cd /vagrant/rails_tutorial/sample_app; /bin/bash' 让你进入。出于某种原因,如果你不启动 shell.

,vagrant 会一直把你踢出去

vagrant ssh -- 允许您将命令传递到 SSH 客户端。这是 vagrant 自己的实用程序。下一个标志 -t 是一个 SSH 标志,它允许 SSH 在将控制权交还给您之前执行某些命令。您将命令放在 -t 标志之后,但请确保以 <last command> ; /bin/bash 结束它,以便它为您启动 shell 并且您不会被踢出。

您还可以使用 Heredoc 运行 ssh 后的命令,方法是在您的脚本中使用类似于此的内容:

# Use heredoc to send script over ssh
$ssh_cmd << 'END_DOC'

cd <path>
commands

exit
END_DOC

echo $ssh_cmd