shell - commands - vagrant ssh password
Cómo ssh a vagabundo sin ejecutar realmente "vagabundo ssh"? (15)
En la ejecución de la terminal
vagrant ssh
En otra ventana de terminal / pestaña ejecutar
ps aux | grep ssh
Allí verá el comando real ejecutado por Vagrant, algo como esto:
ssh [email protected] -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
Me gustaría reproducir la forma en que Vagrant se conecta a mi VM dentro de un script de shell usando el comando ssh
, así que creo un alias para mi instancia de Vagrant.
¿Cuál es la sintaxis del comando para usar el comando regular ssh
para acceder a él?
Hay una manera de replicar cómo un usuario remoto podría iniciar sesión en el sistema
- Edite el archivo Vagrant para su instancia agregando
config.vm.network "private_network", ip: "192.168.33.10"
Esto agrega una IP privada para el host (haga que sea lo que desee en el rango 192.168 siempre que no se haya utilizado ya
- Reinicia la instancia con recarga vagabunda desde la línea de comando
- Copie el archivo vagabundo_key privado a algún equivalente de Linux que debería tener ejecutado en su caja (por ejemplo, Cygwin si en windows, uso Windows 10) a su directorio de inicio de cygwin, renomándolo en el camino a algo que describa el host. por ejemplo,
your_virtual_host_name.pem
Encontrará la clave debajo de .vagrant / machines / default / virtualbox / private_key
Vaya a su directorio de inicio y haga su ssh habitual de Unix, por lo que
ssh -i your_virtual_hostname.pem [email protected]
donde el nombre de usuario, bien puede ser vago si tienes una caja estándar, mira la salida de ssh-config vagabundo para los detalles estándar de ssh para la caja.
Eso es
Lo resolví de una manera muy simple: cuando inicias el cuadro vagabundo, muestra la dirección ssh como esta
SSH address: 127.0.0.1:2222
entonces puedes conectarte a la caja usando el usuario vago, el host y el puerto que obtienes
ssh [email protected] -p 2222
Mi Env. es Win7 + Centos. La respuesta con más acuerdo no funciona para mí. Después de fallar después de probar ssh -p [port] [usrname]@127.0.01
, solo uso XShell para agregar una nueva sesión con el puerto vago y el nombre de usuario.
Funciona.
Quizás Xshell es un candinado.
Muchas de las otras respuestas asumen que tiene instalado Vagrant.
Tengo Vagrant instalado en Windows 10, pero no puedo vagrant ssh
porque estoy usando PuTTy como mi cliente SSH, que el vagabundo no aceptará.
El ejecutable
ssh
encuentra en el PATH es un cliente SSH de PuTTY Link. Vagrant solo es compatible con los clientes OpenSSH SSH.
Sin embargo, en Windows 10 también tenemos Bash en Ubuntu en Windows. Entonces, solo uso eso con el siguiente comando:
ssh [email protected] -p2222 -i .vagrant/machines/default/virtualbox/private_key -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=Fatal
Es bastante fácil instalar Vagrant en Win10-Ubuntu pero también quiere que instale Virtualbox por alguna razón, lo cual prefiero no hacer.
NB He intentado con el método ssh default -F vagrant-ssh-config
, pero acabo de recibir
Permiso denegado (clave pública, contraseña).
Supongo que esto se debe a que la ruta de IdentityFile
es una ruta de Windows, mientras que en Bash, debe comenzar con /mnt/c/
. Supongo que podrías escribir el archivo y luego modificarlo si eso funciona mejor para ti.
Puede agregar ssh config para su host vagabundo a ssh config.
Obtenga ssh config para la máquina vagabunda en la carpeta
vagrant ssh-config
:vagrant ssh-config
Abra
{UserDir}/.ssh/config
y anexe el resultado del comando anterior. Nota : elHost default
la primera línea es el alias que usará más adelante para el comandossh
. Nómbrelo como su máquina vagabunda o dir. Si tienes solo un dir vago, puedes ponerle el nombreHost vagrant
Ssh a vagabundo:
ssh vagrant
El apellido es alias del paso anterior.
Puede tomar cualquiera de los argumentos de ssh-config
y pasarlos a ssh en la línea de comando como -o Key=value
. Por lo tanto, para una configuración de vagabundo simple de un solo host (puede que tenga que trabajar un poco más con grep
o perl
para una configuración de múltiples hosts), puede hacer algo como lo siguiente (o reemplazar perl
con sed
si lo desea):
ssh `vagrant ssh-config | tail -8 | perl -pe ''s/^/s+/-o@/; s//s//=/;s/@/ /;s//n/ /''` vagrant@localhost
Si solo desea configurarlo para que pueda usar normal la línea de comandos ssh normal, así como también scp y similares, puede ejecutar vagrant ssh-config
y anexar la salida a su configuración ssh predeterminada. Si reemplaza la línea "Host default" con un nombre de host más descriptivo, debería estar listo para continuar.
vagrant ssh-config |sed -e "s/Host default/Host my_cool_dev_box/" >> ~/.ssh/config
ssh my_cool_dev_box
Si solo desea que el comando mínimo para conectarse a su caja, necesita saber el puerto que está utilizando (impreso al hacer vagrant up
, o visible haciendo vagrant ssh-config
) y dónde está su clave SSH privada (también visible cuando hace vagrant ssh-config
)
Entonces solo se trata de proporcionar la clave y el puerto:
ssh -p 2222 -i $HOME/vagrantenv/.vagrant/machines/default/virtualbox/private_key [email protected]
Simplemente pase todo el vagrant ssh-config
como un archivo de configuración a ssh
con el parámetro -F configfile
. El alias de host para conectarse se define en la primera línea en vagrant ssh-config
; Host default
significa que puedes conectarte con ssh default
.
No pude ver una opción para leer el archivo de configuración de la entrada estándar, así que fui con la ruta del archivo temporal. Aquí hay una línea que también limpia el $TMPDIR.vagrant-ssh-config
temporal después. Debe ejecutarse en el mismo directorio que su Vagrantfile
, suponiendo que su caja vagabunda esté en funcionamiento.
vagrant ssh-config > $TMPDIR.vagrant-ssh-config && ssh default -F $TMPDIR.vagrant-ssh-config ; rm $TMPDIR.vagrant-ssh-config
Nota: en mi sistema Mac OSX, $TMPDIR
expande a /var/folders/46/yltlhtgx8m5cg68_w95wgvy41324gn/T/
(en este momento). Use another variable , u otra carpeta, si no está configurada en su sistema.
Tuve que volver a implementar "vagabundo ssh" porque su opción -c
no transmitió los argumentos correctamente. Esto es básicamente lo que hace (puede haber más, pero funciona bien de esta manera)
#!/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 /
"$@"
Como un trazador de líneas (con gracias a kgadek):
ssh $(vagrant ssh-config | awk ''NR>1 {print " -o "$1"="$2}'') localhost
Para tener en cuenta cuando tienes más de un host vagabundo, este seleccionará el host deseado, así como eliminar las líneas en blanco de la configuración (usando sed):
HOST=name-of-my-host
ssh $(vagrant ssh-config $HOST | sed ''/^[[:space:]]*$/d'' | awk ''NR>1 {print " -o "$1"="$2}'') localhost
Ya hay muchas respuestas, pero todas parecen demasiado complicadas o resuelven problemas que el solicitante no tenía.
simplemente:
# save the config to a file
vagrant ssh-config > vagrant-ssh
# run ssh with the file.
ssh -F vagrant-ssh default
ssh vagrant@<host>
contraseña: vagrant
Ejemplos:
o después de verificar la IP (desde el interior, usando
vagrant ssh
)ssh [email protected]
Si no necesita usar stdin con ssh
(por ejemplo, desea ejecutar solo un comando y cerrar la sesión), puede usar:
vagrant ssh-config --host default | ssh -F /dev/stdin default
Este método fue sugerido en respuesta a una pregunta similar sobre grupos de google .
Lamentablemente , la sustitución del proceso bash tampoco funciona (consulte esta pregunta en unix.stackexchange para obtener más información).
Las mejores opciones que tiene, si desea un shell interactivo, son crear un archivo temporal y usarlo con ssh -F
o usar awk
como lo sugieren las demás respuestas.
Vagrant almacena la clave privada en ~/.vagrant.d/insecure_private_key
y la usa para conectarse a cada máquina a través de ssh
, teniendo en cuenta que está configurada para conectarse en el puerto 2200 (por defecto) sería algo así como:
ssh vagrant@localhost -p 2200 -i ~/.vagrant.d/insecure_private_key
Nota: asegúrese de que la clave privada sea propiedad del usuario que ejecuta Vagrant
.
Aunque si su objetivo es tener un entorno de máquinas múltiples, puede hacerlo utilizando config.vm.define
.
Aquí hay un ejemplo que ilustra un entorno con 2 máquinas, una llamada web
y la otra son 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
Luego tendrá todos los comandos de Vagrant disponibles por máquina, es decir, vagrant ssh web
y vagrant provision databases
.