如何在没有实际运行“stream浪ssh”的情况下sshstream浪?

我想重现Vagrant如何使用ssh命令在shell脚本内logging我的虚拟机,所以我为我的Vagrant实例创build一个别名。

什么是使用普通的ssh命令来访问它的命令语法?

我不得不重新实施“stream浪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 

为了说明当你有多个stream浪主机时,这将select所需的主机,以及从configuration(使用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 

在terminal运行

 vagrant ssh 

在另一个terminal窗口/标签运行

 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作为configuration文件传递给ssh并使用-F configfile参数。 要连接的主机别名在vagrant ssh-config的第一行定义; Host default意味着您可以使用ssh default连接。

我看不到从标准input读取configuration文件的选项,所以使用临时文件path。 这里是一个简单的$TMPDIR.vagrant-ssh-config还会清理临时的$TMPDIR.vagrant-ssh-config文件。 它需要在你的Vagrantfile文件所在的目录下执行,假设你的stream浪盒正在运行。

 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/ (现在)。 如果未在系统上设置,请使用其他 variables或其他文件夹。

如果你不需要使用stdinssh (例如你只想执行一个命令并注销),你可以使用:

 vagrant ssh-config --host default | ssh -F /dev/stdin default 

这个方法是针对谷歌类似的问题而提出的。

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

如果你想要一个交互式shell,最好的select是创build一个临时文件,并用ssh -F或者像其他答案所build议的那样使用awk

如果你只是想设置它,所以你可以使用普通的ssh命令行,以及scp等,你可以运行vagrant ssh-config并将输出附加到默认的sshconfiguration。 如果你用一个更具描述性的主机名replace“主机默认”这一行,你应该很好。

 vagrant ssh-config |sed -e "s/Host default/Host my_cool_dev_box/" >> ~/.ssh/config ssh my_cool_dev_box 

Vagrant将私钥存储在~/.vagrant.d/insecure_private_key并使用它通过ssh连接到每台机器,考虑到它被configuration为在端口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 

那么你将有每台机器可用的所有stream浪汉命令,即vagrant ssh webvagrant provision databases

其他很多答案都假设你已经安装了Vagrant。

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

在PATH中find的ssh可执行文件是一个PuTTY链接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,我宁愿不这样做。

NB我已经尝试过使用ssh default -F vagrant-ssh-config方法,但是我只是得到了

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

我猜这是因为IdentityFilepath是一个Windowspath,而在Bash中,它应该以/mnt/c/开头。 我想你可以写出文件,然后修改它,如果这对你更好。

您可以使用任何ssh-config参数,并将其作为-o Key=value在命令行中传递给ssh。 所以,对于一个简单的单主机stream浪者设置(你可能需要做一个多主机设置的grepperl多一点的工作),你可以做下面的事情(或者用sedreplaceperl ,如果你愿意的话):

 ssh `vagrant ssh-config | tail -8 | perl -pe 's/^\s+/-o@/; s/\s/\=/;s/@/ /;s/\n/ /'` vagrant@localhost 

如果你只是想要最低限度的命令连接到你的盒子,你需要知道它使用的端口(在vagrant up打印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

我的环境 是Win7 + Centos。 大多数协议的答案不适用于我。 在尝试ssh -p [port] [usrname]@127.0.01之后失败之后,我只是使用XShell添加一个新的会话,包含vagrant端口和用户名。

有用。

也许Xshell是一个候选人。

有一种方法可以复制远程用户如何login系统

  1. 编辑join的实例的Vagrantfile

config.vm.network "private_network", ip: "192.168.33.10"

这为主机添加了一个私有IP(只要它没有被使用,就可以在192.168范围内使其成为你所希望的)

  1. 使用vagrant重新加载从命令行重新启动实例
  2. 将vagrant private_key文件拷贝到你的cygwin home目录下的一些Linux应用程序(例如Cygwin,如果在windows上,我使用的是Windows 10),重命名它以描述主机将被使用的东西因为,例如

your_virtual_host_name.pem

  1. 您可以在.vagrant \ machines \ default \ virtualbox \ private_key下find密钥

  2. 去你的家目录,做你的平常Unix的SSH,所以

ssh -i your_virtual_hostname.pem username@192.168.33.10

在那里用户名,如果你有一个标准的盒子可能是stream浪的,看看vagrant ssh-config的输出,以获得盒子的ssh标准详细信息。

而已

我用一个非常简单的方法解决了这个问题:当你启动stream浪箱时,它会显示这样的ssh地址

 SSH address: 127.0.0.1:2222 

那么你可以通过使用stream浪的用户,主机和端口,你可以连接到框

 ssh vagrant@127.0.0.1 -p 2222 

ssh vagrant@<host>密码: vagrant

例子:

  • ssh vagrant@vagrant.local

  • 或者在检查IP后(从内部使用vagrant sshssh vagrant@172.28.128.3