如何在没有实际运行"vagrant ssh"的情况下ssh到vagrant?

Kev*_*rke 142 ssh shell command-line vagrant

我想重现Vagrant如何使用ssh命令在shell脚本中记录到我的VM的方式,因此我为我的Vagrant实例创建了一个别名.

使用常规ssh命令访问它的命令语法是什么?

Ste*_*oka 138

已经有很多答案,但它们看起来都过于复杂或者解决了提问者没有的问题.

只是:

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

# run ssh with the file.
ssh -F vagrant-ssh default
Run Code Online (Sandbox Code Playgroud)

  • 使用一些shell(例如`zsh`),以下单行程可以工作:`ssh -F =(vagrant ssh-config)default` (5认同)
  • 通过按照 @adamczi 建议的方式向 `~/.ssh/config` 添加条目,您就可以使用 Visual Studio Code Remote - SSH 扩展通过 ssh 进入 Vagrant VM 并编辑文件并进行远程开发。只需 CMD-SHIFT-P 然后“Remote-SSH:连接到主机...”,您刚刚添加的 ssh .config 条目就会自动列出 - 您只需选择它,瞧,vscode 连接到您的远程 vagrant 虚拟机!如果没有配置输入方法,我不确定我会如何使用 vscode 来完成它。 (3认同)
  • 这是惊人的。注意在`.gitignore`中添加`vagrant-ssh`文件。 (2认同)
  • 可爱的:)-您也可以将scp命令与-F选项一起使用 (2认同)
  • 您可能希望将此结果回显到`ssh`配置文件中:`vagrant ssh-config >>〜/ .ssh / config`,因此您只需从系统中的任何位置运行`ssh default`,其中`default`是名称您可以在[此处](/sf/answers/1430225401/)指定的VM数量 (2认同)

Ste*_*zzo 105

我不得不重新实现"vagrant ssh",因为它的-c选项没有正确传递参数.这基本上就是它的功能(可能会有更多,但它的工作方式很好)

#!/bin/sh
PORT=$(vagrant ssh-config | grep Port | grep -o '[0-9]\+')
ssh -q \
    -o UserKnownHostsFile=/dev/null \
    -o StrictHostKeyChecking=no \
    -i ~/.vagrant.d/insecure_private_key \
    vagrant@localhost \
    -p $PORT \
    "$@"
Run Code Online (Sandbox Code Playgroud)

作为单线(感谢kgadek):

ssh $(vagrant ssh-config | awk 'NR>1 {print " -o "$1"="$2}') localhost
Run Code Online (Sandbox Code Playgroud)

为了解释当你有多个vagrant主机时,这将选择所需的主机,以及从配置中剔除空白行(使用sed):

HOST=name-of-my-host
ssh $(vagrant ssh-config $HOST | sed '/^[[:space:]]*$/d' |  awk 'NR>1 {print " -o "$1"="$2}') localhost
Run Code Online (Sandbox Code Playgroud)

  • 这个答案不允许你从`Vagrantfile`目录("使用常规`ssh`命令")之外`ssh`到你的Vagrant,这是我解释问题的方式. (3认同)

Lek*_*sat 49

在终端运行中

vagrant ssh
Run Code Online (Sandbox Code Playgroud)

在另一个终端窗口/选项卡中运行

ps aux | grep ssh
Run Code Online (Sandbox Code Playgroud)

在那里你会看到Vagrant执行的实际命令,如下所示:

ssh vagrant@127.0.0.1 -p 2222 -o Compression=yes -o DSAAuthentication=yes -o LogLevel=FATAL -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o IdentitiesOnly=yes -i ~/.vagrant.d/less_insecure_private_key -o ForwardAgent=yes
Run Code Online (Sandbox Code Playgroud)


Joe*_*rra 18

只需将整个vagrant ssh-config配置文件传递ssh-F configfile参数即可.要连接的主机别名是在第一行定义的vagrant ssh-config; Host default意味着你可以连接ssh default.

我看不到从标准输入读取配置文件的选项,因此使用临时文件路径.这是一个单行,$TMPDIR.vagrant-ssh-config后来也清理临时文件.Vagrantfile假设流浪盒已启动并运行,它需要在与您相同的目录中执行.

vagrant ssh-config > $TMPDIR.vagrant-ssh-config && ssh default -F $TMPDIR.vagrant-ssh-config ; rm $TMPDIR.vagrant-ssh-config
Run Code Online (Sandbox Code Playgroud)

注意:在我的Mac OSX系统上,$TMPDIR展开到/var/folders/46/yltlhtgx8m5cg68_w95wgvy41324gn/T/(现在).如果未在系统上设置,请使用其他 变量或其他文件夹.

  • 如果您使用bash或zsh,[进程替换](http://tldp.org/LDP/abs/html/process-sub.html)是将一个命令的输出传递给另一个命令的更简单方法.bash:`ssh -F <(vagrant ssh-config)`zsh:[zsh process substitution](http://zsh.sourceforge.net/Intro/intro_7.html)`ssh -F =(vagrant ssh-config)` (3认同)

Sam*_*gah 14

我以一种非常简单的方式解决了这个问题:当你启动流浪盒时,它会显示这样的ssh地址

SSH address: 127.0.0.1:2222
Run Code Online (Sandbox Code Playgroud)

然后你可以使用vagrant用户,主机和你得到的端口连接到盒子

ssh vagrant@127.0.0.1 -p 2222
Run Code Online (Sandbox Code Playgroud)

  • 好的!请注意,通常情况下,vagrant 用户的密码是 `vagrant` (3认同)

tyr*_*ion 7

如果您不需要使用标准输入ssh(比如你想只执行一个命令和注销),你可以使用:

vagrant ssh-config --host default | ssh -F /dev/stdin default
Run Code Online (Sandbox Code Playgroud)

针对Google群组中的类似问题,建议使用此方法.

不幸的是,bash进程替换也不起作用(有关更多详细信息,请参阅unix.stackexchange上的此问题).

如果您需要交互式shell,您拥有的最佳选项是创建临时文件,并使用其他答案建议ssh -F或使用awk它.


Vin*_*pta 6

您可以将 vagrant 主机配置添加到本地 ssh 配置中。

  1. vagrant ssh-config >> ~/.ssh/config

  2. ssh vagrant@{host}

前任。猫 ~/.ssh/config

Host kmaster
  HostName 127.0.0.1
  User vagrant
  Port 2222..
  ....
Run Code Online (Sandbox Code Playgroud)
  • ssh vagrant@kmaster


Ted*_*ard 5

如果你只是想设置它以便你可以正常使用正常的ssh命令行,以及scp等,你可以运行vagrant ssh-config并将输出附加到你的默认ssh配置.如果您将"主机默认值"行替换为更具描述性的主机名,那么您应该很高兴.

vagrant ssh-config |sed -e "s/Host default/Host my_cool_dev_box/" >> ~/.ssh/config
ssh my_cool_dev_box
Run Code Online (Sandbox Code Playgroud)


Nic*_*eva 5

如果您只想使用最低限度的命令连接到您的盒子,您需要知道它正在使用的端口(在执行时打印vagrant up或可见执行vagrant ssh-config)以及您的 SSH 私钥在哪里(执行时也可见vagrant ssh-config

然后只需提供密钥和端口即可:

ssh -p 2222 -i $HOME/vagrantenv/.vagrant/machines/default/virtualbox/private_key vagrant@127.0.0.1


mpe*_*pen 5

许多其他答案都假设您已经安装了 Vagrant。

我在 Windows 10 上安装了 Vagrant,但无法安装,vagrant ssh因为我使用 PuTTy 作为 SSH 客户端,而 vagrant 不接受该客户端。

sshPATH 中找到的可执行文件是 PuTTY Link SSH 客户端。Vagrant 仅与 OpenSSH SSH 客户端兼容。

然而,在 Windows 10 中,我们在 Windows 上的 Ubuntu 上也有 Bash。因此,我只需使用以下命令即可:

ssh vagrant@127.0.0.1 -p2222 -i .vagrant/machines/default/virtualbox/private_key -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=Fatal
Run Code Online (Sandbox Code Playgroud)

在 Win10-Ubuntu 上安装 Vagrant 很容易,但出于某种原因它还要求你安装 Virtualbox,但我不想这样做。

注意我已经尝试过该ssh default -F vagrant-ssh-config方法,但我只是得到

权限被拒绝(公钥、密码)。

我猜这是因为该IdentityFile路径是 Windows 路径,而在 Bash 中,它应该以/mnt/c/. 我想您可以写出该文件,然后修改它(如果这对您来说更有效)。