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)
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)
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/(现在).如果未在系统上设置,请使用其他 变量或其他文件夹.
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)
如果您不需要使用标准输入与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它.
您可以将 vagrant 主机配置添加到本地 ssh 配置中。
vagrant ssh-config >> ~/.ssh/config
ssh vagrant@{host}
前任。猫 ~/.ssh/config
Host kmaster
HostName 127.0.0.1
User vagrant
Port 2222..
....
Run Code Online (Sandbox Code Playgroud)
如果你只是想设置它以便你可以正常使用正常的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)
如果您只想使用最低限度的命令连接到您的盒子,您需要知道它正在使用的端口(在执行时打印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
许多其他答案都假设您已经安装了 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/. 我想您可以写出该文件,然后修改它(如果这对您来说更有效)。
| 归档时间: |
|
| 查看次数: |
60691 次 |
| 最近记录: |