很多其他答案都假设您安装了Vagrant。
我在Windows 10上安装了Vagrant,但我不能 vagrant ssh 因为我使用PuTTy作为我的SSH客户端,流浪者不会接受。
vagrant ssh
该 ssh PATH中的可执行文件是PuTTY Link SSH客户端。 Vagrant仅与OpenSSH SSH客户端兼容。
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 方法,但我得到
ssh default -F vagrant-ssh-config
权限被拒绝(公钥,密码)。
我猜这是因为 IdentityFile path是Windows路径,而在Bash中,它应该以 /mnt/c/ 。我想你可以写出文件,然后修改它,如果这对你更好。
IdentityFile
/mnt/c/
ssh vagrant@<host> 密码: vagrant
ssh vagrant@<host>
vagrant
例子:
ssh vagrant@vagrant.local
或检查IP后(从内部,使用 vagrant ssh ) ssh vagrant@172.28.128.3
ssh vagrant@172.28.128.3
有一种方法可以复制远程用户登录系统的方式
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
如果你有一个标准的盒子,那么用户名,很可能是流浪汉,请查看vagrant ssh-config的输出,以获得该盒子的ssh标准细节。
而已
如果您只想将最小的命令连接到您的盒子,您需要知道它正在使用的端口(在执行时打印) vagrant up 或者看得见 vagrant ssh-config )和你的私人SSH密钥(在执行时也可见) vagrant ssh-config )
vagrant up
vagrant ssh-config
然后只需提供密钥和端口:
ssh -p 2222 -i $HOME/vagrantenv/.vagrant/machines/default/virtualbox/private_key vagrant@127.0.0.1
的 流浪汉 强> 存储私钥 ~/.vagrant.d/insecure_private_key 并使用它连接到每台机器 ssh ,考虑到它被配置为在端口2200上连接(默认),它将类似于:
~/.vagrant.d/insecure_private_key
ssh vagrant@localhost -p 2200 -i ~/.vagrant.d/insecure_private_key
注意:确保私钥由运行的用户拥有 Vagrant 。
Vagrant
虽然你的目标是拥有一个 多机环境 你可以这样做 config.vm.define 。
config.vm.define
这是一个示例,说明了一台有两台机器的环境,一台叫做 web 另一个是 databases :
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 。
vagrant ssh web
vagrant provision databases
我的环境是Win7 + Centos。大多数协议的答案对我不起作用。尝试失败后 ssh -p [port] [usrname]@127.0.01 ,我只是使用XShell添加一个带有vagrant端口和用户名的新会话。
ssh -p [port] [usrname]@127.0.01
的 有用。 强>
也许Xshell是一个候选人。
在终端运行中
在另一个终端窗口/选项卡中运行
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
的 如果你不需要使用stdin 强> 同 ssh (例如,您只想执行命令和注销)您可以使用:
vagrant ssh-config --host default | ssh -F /dev/stdin default
建议使用此方法来回答类似的问题 谷歌小组 。
不幸 bash进程替换 也不起作用(请参阅此问题 unix.stackexchange 更多细节)。
如果你想要一个交互式shell,你拥有的最佳选择是创建一个临时文件并使用它 ssh -F 或使用 awk 正如其他答案所建议的那样。
ssh -F
awk
我以一种非常简单的方式解决了这个问题 当你启动流浪盒时,它会显示这样的ssh地址
SSH address: 127.0.0.1:2222
然后你可以使用vagrant用户,主机和你得到的端口连接到盒子
ssh vagrant@127.0.0.1 -p 2222
你可以带任何一个 ssh-config 参数,并将它们传递给命令行上的ssh作为 -o Key=value 。因此,对于一个简单的单宿主流浪汉设置(你可能需要做更多的工作 grep 要么 perl 对于多主机设置),您可以执行以下操作(或替换 perl 同 sed 如果你想):
ssh-config
-o Key=value
grep
perl
sed
ssh `vagrant ssh-config | tail -8 | perl -pe 's/^\s+/-o@/; s/\s/\=/;s/@/ /;s/\n/ /'` vagrant@localhost
我不得不重新实施“vagrant ssh”,因为它是 -c 选项没有正确传递参数。这是 基本上 它做了什么(可能会有更多,但这样做很好)
-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
为了解释当你有多个vagrant主机时,这将选择所需的主机,以及从配置中剔除空白行(使用sed):
HOST=name-of-my-host ssh $(vagrant ssh-config $HOST | sed '/^[[:space:]]*$/d' | 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
如果你只是想设置它以便你可以正常使用正常的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
您可以将流浪者主机的ssh配置添加到ssh配置中。
获取vagrant文件夹中的vagrant机器的ssh配置: vagrant ssh-config
打开 {UserDir}/.ssh/config 并附加上一个命令的结果。 的 注意 强> :第一行 Host default 表示稍后将使用的别名 ssh 命令。将其命名为您的流浪汉机器或目录。如果你只有一个流浪者目录 - 你可以命名它 Host vagrant
{UserDir}/.ssh/config
Host default
Host vagrant
Ssh to vagrant: ssh vagrant 。姓氏是上一步的别名。
ssh vagrant