Gostaria de reproduzir a maneira como o Vagrant faz logon na minha VM em um script de shell usando o ssh
comando, para criar um alias para minha instância do Vagrant.
Qual é a sintaxe do comando para usar o ssh
comando regular para acessá-lo?
shell
command-line
ssh
vagrant
Kevin Burke
fonte
fonte
vagrant ssh-config
.Respostas:
Eu tive que reimplementar o "vagrant ssh" porque sua
-c
opção não passou os argumentos corretamente. É basicamente o que faz (pode haver mais, mas funciona bem dessa maneira)Como one-liner (com agradecimentos a kgadek):
Para explicar quando você tem mais de um host vagante, isso selecionará o host desejado, bem como separará as linhas em branco da configuração (usando sed):
fonte
ssh
em contato com o Vagrant de fora doVagrantfile
diretório ("usando ossh
comando regular "), e foi assim que interpretei a pergunta.auto_correct: true
configuração. Aqui está mais informações sobre como alterar manualmenteHost
entrada. O comando modificado é:ssh $(vagrant ssh-config | awk 'NR>1 {print " -o "$1"="$2}') localhost
Já existem muitas respostas, mas todas parecem complicadas demais ou resolvem problemas que o solicitante não tinha.
simplesmente:
fonte
vagrant-ssh
arquivo.gitignore
.zsh
), a seguinte linha funciona:ssh -F =(vagrant ssh-config) default
ssh
arquivo de configuração:vagrant ssh-config >> ~/.ssh/config
, então você apenas executarssh default
a partir de qualquer lugar no seu sistema, ondedefault
é o nome da VM que você pode especificar como aqui-F
não é simples~/.ssh/config
maneira como o @adamczi sugere, você pode usar a extensão Visual Studio Code Remote - SSH para ssh na VM do Vagrant e editar arquivos e fazer desenvolvimento remoto. Simplesmente CMD-SHIFT-P, em seguida, "SSH remoto: conecte-se ao host ..." e a entrada ssh .config que você acabou de adicionar é automaticamente listada - basta selecioná-lo e pronto, o vscode se conecta ao seu vagabundo remoto vm! Sem a abordagem de entrada de configuração, não sei de que outra forma eu teria feito isso com o vscode.Na execução do terminal
Em outra janela / guia do terminal, execute
Lá você verá o comando real executado pelo Vagrant, algo como isto:
fonte
Apenas passe o
vagrant ssh-config
arquivo inteiro como um arquivo de configuração parassh
com o-F configfile
parâmetro O alias do host ao qual se conectar é definido na primeira linhavagrant ssh-config
;Host default
significa que você pode se conectarssh default
.Não consegui ver uma opção para ler o arquivo de configuração a partir da entrada padrão, então fui com a rota do arquivo temporário. Aqui está uma lista que também limpa o
$TMPDIR.vagrant-ssh-config
arquivo temporário posteriormente. Ele precisa ser executado no mesmo diretório que o seuVagrantfile
, supondo que a sua caixa vagrant esteja em funcionamento.Nota: no meu sistema Mac OSX,
$TMPDIR
expande para/var/folders/46/yltlhtgx8m5cg68_w95wgvy41324gn/T/
(agora). Use outra variável ou outra pasta, se não estiver definida no seu sistema.fonte
ssh -F <(vagrant ssh-config)
zsh: substituição do processo zshssh -F =(vagrant ssh-config)
ssh -F
no bash - a maneira como você mencionou deve funcionar no zsh.Resolvi isso de uma maneira muito simples: quando você inicia a caixa vagrant, ela mostra o endereço ssh assim
então você pode se conectar à caixa usando o usuário vagante, o host e a porta que você obtém
fonte
vagrant
Se você não precisar usar o stdin com
ssh
(por exemplo, deseja executar apenas um comando e logout), poderá usar:Este método foi sugerido em resposta a uma pergunta semelhante nos grupos do Google .
Infelizmente , a substituição do processo bash também não funciona (consulte esta pergunta em unix.stackexchange para obter mais detalhes).
As melhores opções que você tem, se desejar um shell interativo, são criar um arquivo temporário e usá-lo com
ssh -F
ouawk
conforme sugerido pelas outras respostas.fonte
Se você quiser apenas configurá-lo para poder usar normalmente a linha de comando ssh normal, assim como o scp e outros, poderá executar
vagrant ssh-config
e anexar a saída à sua configuração ssh padrão. Se você substituir a linha "Host default" por um nome de host mais descritivo, você deve estar pronto.fonte
Se você deseja que o comando mínimo necessário se conecte à sua caixa, você precisa conhecer a porta que está usando (impressa ao fazer
vagrant up
ou visívelvagrant ssh-config
) e onde está sua chave SSH privada (também visível ao fazervagrant ssh-config
)Depois, basta fornecer a chave e a porta:
ssh -p 2222 -i $HOME/vagrantenv/.vagrant/machines/default/virtualbox/private_key [email protected]
fonte
Muitas das outras respostas assumem que você tem o Vagrant instalado.
Eu tenho o Vagrant instalado no Windows 10, mas não posso
vagrant ssh
porque estou usando o PuTTy como meu cliente SSH, o que o vagrant não aceita.No entanto, no Windows 10, também temos o Bash no Ubuntu no Windows. Então, eu apenas uso isso com o seguinte comando:
É fácil instalar o Vagrant no Win10-Ubuntu, mas também quer que você instale o Virtualbox por algum motivo, o que eu prefiro não fazer.
NB Eu tentei com o
ssh default -F vagrant-ssh-config
método, mas eu apenasSuponho que isso ocorre porque o
IdentityFile
caminho é um caminho do Windows, enquanto que no Bash deve começar/mnt/c/
. Suponho que você possa escrever o arquivo e modificá-lo se isso funcionar melhor para você.fonte
Você pode adicionar uma configuração de host vagante à sua configuração ssh local.
vagrant ssh-config >> ~ / .ssh / config
ssh vagrant @ {host}
ex. cat ~ / .ssh / config
fonte
Existe uma maneira de replicar como um usuário remoto pode efetuar login no sistema
config.vm.network "private_network", ip: "192.168.33.10"
Isso adiciona um IP privado para o host (faça o que você deseja no intervalo 192.168, desde que ele ainda não seja usado
your_virtual_host_name.pem
Você encontrará a chave em .vagrant \ machines \ default \ virtualbox \ private_key
Vá para o seu diretório pessoal e faça o seu habitual Unix ssh, então
ssh -i your_virtual_hostname.pem [email protected]
Onde nome de usuário, pode ser vagrant se você tiver uma caixa padrão, observe a saída de vagrant ssh-config para obter detalhes padrão da ssh para a caixa.
É isso aí
fonte
.vagrant
pasta são de propriedade do root. E as permissões no arquivo eram rw -------, portanto, apenas o root tinha permissões para ler o arquivo-chave. Talvez isso possa ser útil para qualquer pessoa.O Vagrant armazena a chave privada
~/.vagrant.d/insecure_private_key
e a usa para conectar-se a todas as máquinasssh
, considerando que está configurado para conectar-se na porta 2200 (padrão), seria algo como:ssh vagrant@localhost -p 2200 -i ~/.vagrant.d/insecure_private_key
Nota: verifique se a chave privada pertence ao usuário em execução
Vagrant
.Embora, se seu objetivo é ter um ambiente com várias máquinas, você pode fazê-lo usando
config.vm.define
.Aqui está um exemplo que ilustra um ambiente com 2 máquinas, uma chamada
web
e a outra édatabases
:Então você terá todos os comandos do Vagrant disponíveis por máquina, ie
vagrant ssh web
evagrant provision databases
.fonte
ssh vagrant@<host>
senha:vagrant
Exemplos:
ssh [email protected]
ou depois de verificar o IP (de dentro, usando
vagrant ssh
)ssh [email protected]
fonte
Você pode adicionar a configuração ssh para seu host vagrant na configuração ssh.
Obtenha a configuração ssh para a máquina vagrant na pasta vagrant:
vagrant ssh-config
Abra
{UserDir}/.ssh/config
e acrescente o resultado do comando anterior. Nota : a primeira linhaHost default
significa o apelido que você usará posteriormente para ossh
comando. Nomeie-o como sua máquina vagrant ou dir. Se você tiver apenas um diretório vagrant - você pode nomearHost vagrant
Ssh para Vagrant:
ssh vagrant
. O sobrenome é alias da etapa anterior.fonte
Você pode pegar qualquer um dos
ssh-config
argumentos e passá-los para ssh na linha de comando como-o Key=value
. Portanto, para uma configuração vagrant simples de um host (talvez você precise fazer um pouco mais de trabalho comgrep
ouperl
para uma configuração multihost), faça algo como o seguinte (ou substituaperl
-osed
se desejar):fonte
Meu Env. é Win7 + Centos. A resposta com mais concordância não funciona para mim. Depois de falhar depois de tentar
ssh -p [port] [usrname]@127.0.01
, apenas uso o XShell para adicionar uma nova sessão com a porta e o nome do usuário vagrantes.Funciona.
Talvez Xshell seja um candinate.
fonte