Cygwin:Vagrant SSH,空命令提示符

6
如果我使用Windows的命令提示符运行vagrant ssh,那么我会获得一个美观的命令提示符,如下所示:
vagrant@homestead:~$ echo foo
vagrant@homestead:~$ foo

但是使用cygwin和mintty时,我完全没有提示符:
echo foo
foo

我看到这与“伪终端分配”有关。

使用cygwin和mintty,我可以将我的提示符设置为:

vagrant ssh -- -t -t

我该如何更改cygwin和mintty,以便我不必告诉-t?
关于ssh -t选项:
“强制分配伪终端。这可用于在远程机器上执行任意基于屏幕的程序,这非常有用,例如在实现菜单服务时。多个-t选项会强制分配tty,即使ssh没有本地tty。”
5个回答

6

我曾经遇到过同样的问题,解决方法是设置 VAGRANT_PREFER_SYSTEM_BIN 环境变量,让 vagrant 使用你正常的 ssh 可执行文件。

你可以这样做:

VAGRANT_PREFER_SYSTEM_BIN=1 vagrant ssh

或者将其添加到你的 .bash_profile 文件中:

export VAGRANT_PREFER_SYSTEM_BIN=1

参考文献:https://github.com/hashicorp/vagrant/issues/9143#issuecomment-343311263


2

我遇到了上述描述的同样问题,但只有三台电脑中的一台。但是,我正在使用以下解决方法:

# save the config to a file
vagrant ssh-config > vagrant-ssh

# run ssh with the file.
ssh -F vagrant-ssh default

这是从如何在不实际运行“vagrant ssh”情况下连接vagrant?的回答中得出的。

在这种情况下,我可以得到提示符,并且更重要的是历史循环和ctrl-c等也能正常工作。


升级到Vagrant 1.9.7之后,“vagrant ssh”按预期工作(提示符显示和其他所有内容)。 - Uriziel47

1

Vagrant是一个管理虚拟机的Windows程序。
https://www.vagrantup.com/intro/index.html

因此,它与Cygwin程序使用的伪tty结构不兼容。阅读其他许多Windows程序类似问题的参考资料。
https://github.com/mintty/mintty/issues/56

Mintty是一个Cygwin程序。它期望在其内部运行的交互式程序使用cygwin tty功能进行交互行为。在Windows CMD中从Bash运行Vagrant,使CMD成为终端控制,这样Vagrant在交互行为上就没有问题了。

我不认为有必要在Cygwin中运行Vagrant。


1
但这实际上与mintty有关。如果我在cmd中运行以下命令:C:\cygwin64\bin\bash --login -i,然后可以执行vagrant ssh并获得一个命令提示符。 - trogne
1
但是如果我使用mintty.exe,vagrant ssh会导致一个空的命令提示符。我已经连接上了,但是没有前面的“vagrant@homestead:~$”。 - trogne

0

由于vagrant是基于Windows的,所以我使用ConEmu代替cygwin的shell(mintty)

通过chocolatey安装conemu,它可以正常工作


0

通用解决方案是教 vagrant 使用 ssh,与首选终端兼容。例如 Cygwin ssh+mintty。

现代 Vagrant(v2.1.2)在 Windows 上默认启用 VAGRANT_PREFER_SYSTEM_BIN=1

要解决问题:

VAGRANT_LOG=info vagrant ssh

在 v2.1.2 中,他们破坏了 Cygwin 的支持。请参阅我的错误报告和 Hack,修改lib/vagrant/util/ssh.rb 使其工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接