我想重现Vagrant使用ssh
命令在Shell脚本中登录到我的VM的方式,因此我为Vagrant实例创建了一个别名。
使用常规ssh
命令访问它的命令语法是什么?
vagrant ssh-config
。
我想重现Vagrant使用ssh
命令在Shell脚本中登录到我的VM的方式,因此我为Vagrant实例创建了一个别名。
使用常规ssh
命令访问它的命令语法是什么?
vagrant ssh-config
。
Answers:
我不得不重新实现“ 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 \
"$@"
作为一线客(多亏了kgadek):
ssh $(vagrant ssh-config | awk 'NR>1 {print " -o "$1"="$2}') localhost
要考虑到您有多个虚拟主机的时间,这将选择所需的主机,并从配置中选择空白行(使用sed):
HOST=name-of-my-host
ssh $(vagrant ssh-config $HOST | sed '/^[[:space:]]*$/d' | awk 'NR>1 {print " -o "$1"="$2}') localhost
ssh
从Vagrantfile
目录外部访问“ Vagrant ”(“使用常规ssh
命令”),这就是我对问题的解释方式。
auto_correct: true
设置选择一个未使用的。这是有关如何手动更改
Host
条目。修改后的命令为:ssh $(vagrant ssh-config | awk 'NR>1 {print " -o "$1"="$2}') localhost
已经有很多答案,但是它们似乎都过于复杂,或者解决了问询者所没有的问题。
只是:
# save the config to a file
vagrant ssh-config > vagrant-ssh
# run ssh with the file.
ssh -F vagrant-ssh default
vagrant-ssh
文件.gitignore
。
zsh
),以下一线工作:ssh -F =(vagrant ssh-config) default
-F
并不简单的自动化解决方案
~/.ssh/config
@adamczi建议的方式向其中添加一个条目,然后您可以使用Visual Studio Code Remote-SSH扩展将ssh插入Vagrant VM中并编辑文件并进行远程开发。只需CMD-SHIFT-P然后“远程SSH:连接到主机...”,您刚刚添加的ssh .config条目就会自动列出-您只需选择它,瞧,vscode即可连接到您的远程无所不在的vm!如果没有config entry方法,我不确定使用vscode怎么做。
在终端运行
vagrant ssh
在另一个终端窗口/选项卡中运行
ps aux | grep ssh
在那里,您将看到由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
就在整个传递vagrant ssh-config
一个配置文件,以ssh
与-F configfile
参数。连接到的主机别名在的第一行中定义vagrant ssh-config
。Host default
表示您可以与进行连接ssh default
。
我看不到从标准输入中读取配置文件的选项,因此使用了临时文件路由。这是一个单行代码,该$TMPDIR.vagrant-ssh-config
文件还可以在以后清除临时文件。Vagrantfile
假设您的vagrant box已启动并正在运行,则需要在与您的目录相同的目录中执行该命令。
vagrant ssh-config > $TMPDIR.vagrant-ssh-config && ssh default -F $TMPDIR.vagrant-ssh-config ; rm $TMPDIR.vagrant-ssh-config
注意:在我的Mac OSX系统上,$TMPDIR
展开为/var/folders/46/yltlhtgx8m5cg68_w95wgvy41324gn/T/
(现在)。如果尚未在系统上设置,请使用另一个 变量或另一个文件夹。
ssh -F <(vagrant ssh-config)
zsh:zsh进程替换 ssh -F =(vagrant ssh-config)
ssh -F
-尽管您提到的方式应该在zsh中起作用。
我用一种非常简单的方法解决了这个问题:启动游荡框时,它会显示ssh地址,如下所示
SSH address: 127.0.0.1:2222
然后您可以使用无业游民的用户,主机和端口来连接到该框
ssh vagrant@127.0.0.1 -p 2222
vagrant
如果您不需要将stdin与之配合使用ssh
(例如,您只想执行命令并注销),则可以使用:
vagrant ssh-config --host default | ssh -F /dev/stdin default
有人针对Google网上论坛的类似问题建议使用此方法。
不幸的是,bash进程替换也不起作用(有关更多详细信息,请参见unix.stackexchange上的此问题)。
如果要使用交互式shell,最好的选择是创建一个临时文件,并与其他答案一起ssh -F
使用或使用awk
。
如果您只想让最低限度的最小命令连接到您的机器,则需要知道它正在使用的端口(在执行时打印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不会接受。
ssh
在PATH中找到的可执行文件是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
在Win10-Ubuntu上安装Vagrant很容易,但是出于某些原因,它也希望您安装Virtualbox,而我不想这样做。
注意我已经尝试过该ssh default -F vagrant-ssh-config
方法,但是我得到了
权限被拒绝(公钥,密码)。
我猜这是因为该IdentityFile
路径是Windows路径,而在Bash中,它应该以开头/mnt/c/
。我想您可以写出文件,然后修改它(如果对您更好)。
您可以将无业游民的主机配置添加到本地ssh配置中。
流浪者ssh-config >>〜/ .ssh / config
ssh vagrant @ {host}
例如 猫〜/ .ssh / config
Host kmaster
HostName 127.0.0.1
User vagrant
Port 2222..
....
有一种方法可以复制远程用户如何登录到系统
config.vm.network "private_network", ip: "192.168.33.10"
这将为主机添加一个专用IP(只要尚未使用,请在192.168范围内使其成为您希望的值)
your_virtual_host_name.pem
您将在.vagrant \ machines \ default \ virtualbox \ private_key下找到密钥
转到主目录并执行通常的Unix ssh,因此
ssh -i your_virtual_hostname.pem username@192.168.33.10
如果您有标准框,则用户名很可能是无业游民的,请查看无业游民ssh-config的输出,以获取该框的ssh标准详细信息。
而已
.vagrant
因此文件夹中的所有文件都归root拥有。该文件的权限为rw -------,因此只有root用户具有读取密钥文件的权限。也许这可能对任何人都有帮助。
Vagrant将私钥存储在其中,~/.vagrant.d/insecure_private_key
并使用它通过来连接到每台计算机ssh
,考虑到它已配置为在端口2200上连接(默认),它将类似于:
ssh vagrant@localhost -p 2200 -i ~/.vagrant.d/insecure_private_key
注意:确保私钥归运行用户 Vagrant
。
尽管如果您的目标是拥有多计算机环境,则可以使用config.vm.define
。
这是一个示例,说明具有两台计算机的环境,其中一台被称为web
,另一台是databases
:
config.vm.define 'web', primary: true do |web|
web.vm.box = 'CentOS64'
web.vm.hostname = 'vic-develop'
web.vm.network 'private_network', ip: '192.168.50.10', virtualbox__intnet: true
web.vm.synced_folder '../code', '/var/www/project', :mount_options => ["dmode=777,fmode=777"]
web.vm.provision 'ansible' do |ansible|
ansible.playbook = 'development-web.yml'
ansible.sudo = true
end
end
config.vm.define 'databases' do |db|
db.vm.box = 'CentOS64'
db.vm.network 'private_network', ip: '192.168.50.20', virtualbox__intnet: true
db.vm.network :forwarded_port, guest: 3306, host: 8206
db.vm.provision 'ansible' do |ansible|
ansible.playbook = 'development-db.yml'
ansible.sudo = true
end
end
然后,您将获得每台计算机可用的所有Vagrant命令,即vagrant ssh web
和vagrant provision databases
。
ssh vagrant@<host>
密码: vagrant
例子:
ssh vagrant@vagrant.local
或在检查IP之后(从内部使用vagrant ssh
)ssh vagrant@172.28.128.3
您可以将流浪主机的ssh config添加到ssh config。
在流浪者文件夹中获取流浪者机器的ssh配置: vagrant ssh-config
打开{UserDir}/.ssh/config
并附加上一条命令的结果。注意:第一行Host default
表示别名,稍后将用于ssh
命令。将其命名为无业游民的计算机或目录。如果您只有一个流浪者目录,则可以命名Host vagrant
SSH无业游民:ssh vagrant
。姓是上一步的别名。