在通过 SSH 连接到客户机后继续 shell 脚本执行?
Continuing shell script execution after SSHing into guest machine?
我使用 Vagrant 和 VirtualBox 在我的 Windows 主机上设置了一个 Ubuntu 来宾框。我正在尝试编写一个 shell 脚本,它将...
vagrant up
vagrant ssh
一旦vagrant up
完成
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
我使用 Vagrant 和 VirtualBox 在我的 Windows 主机上设置了一个 Ubuntu 来宾框。我正在尝试编写一个 shell 脚本,它将...
vagrant up
vagrant ssh
一旦vagrant up
完成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 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