web-dev-qa-db-ja.com

「vagrant ssh」を実際に実行せずにvagrantにsshする方法は?

sshコマンドを使用してシェルスクリプト内でVagrantがVMに記録する方法を再現したいので、Vagrantインスタンスのエイリアスを作成します。

通常のsshコマンドを使用してアクセスするためのコマンド構文は何ですか?

139
Kevin Burke

-cオプションが引数を適切に渡さなかったため、「vagrant ssh」を再実装する必要がありました。これは基本的にそれがすることです(もっとあるかもしれませんが、このようにうまく機能します)

#!/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
105
Stefano Palazzo

すでに多くの答えがありますが、それらはすべて過度に複雑に見えるか、質問者が持っていない問題を解決します。

単に:

# save the config to a file
vagrant ssh-config > vagrant-ssh

# run ssh with the file.
ssh -F vagrant-ssh default
133
Steven Soroka

ターミナルランで

vagrant ssh

別の端末ウィンドウ/タブで実行

ps aux | grep ssh

そこで、Vagrantによって実行される実際のコマンドが次のように表示されます。

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
46
Leksat

vagrant ssh-config パラメーターを使用して、-F configfile全体を構成ファイルとしてsshに渡すだけです。接続するホストエイリアスは、vagrant ssh-configの最初の行で定義されます。 Host defaultは、ssh defaultで接続できることを意味します。

標準入力から構成ファイルを読み取るオプションが見つからなかったため、一時ファイルルートを使用しました。次に、一時的な$TMPDIR.vagrant-ssh-configファイルを後でクリーンアップするワンライナーを示します。 vagrant boxが稼働していると仮定して、Vagrantfileと同じディレクトリで実行する必要があります。

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/に展開されます(現在)。 anothervariable または別のフォルダー(設定されていない場合)を使用しますシステム。

17
Joel Purra

私はこれを非常に簡単な方法で解決しました:vagrant boxを起動すると、このようなsshアドレスが表示されます

SSH address: 127.0.0.1:2222

次に、vagrantユーザー、ホスト、取得するポートを使用してボックスに接続できます

ssh [email protected] -p 2222
12

sshとともにstdinを使用する必要がない場合(たとえば、コマンドとログアウトのみを実行したい場合)、次を使用できます。

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

この方法は、 google groups に関する同様の質問に答えて提案されました。

残念ながら bashプロセス置換 も機能しません(詳細については nix.stackexchange のこの質問を参照してください)。

対話型のシェルが必要な場合の最適なオプションは、一時ファイルを作成し、ssh -Fで使用するか、他の回答で提案されているawkを使用することです。

7
tyrion

通常の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
5
Tedward

最低限必要なコマンドをボックスに接続するだけの場合は、使用しているポート(vagrant upを実行するときに表示される、またはvagrant ssh-configを実行するときに表示されるポート)と、SSH秘密キー(また、 vagrant ssh-configを実行すると表示されます)

次に、キーとポートを提供するだけです。

ssh -p 2222 -i $HOME/vagrantenv/.vagrant/machines/default/virtualbox/private_key [email protected]

4
Nico Villanueva

他の多くの答えは、Vagrantがインストールされていることを前提としています。

Windows 10にVagrantをインストールしていますが、SSHクライアントとしてPuTTYを使用しているため、vagrant sshを使用できません。Vagrantは受け入れません。

PATHにあるssh実行可能ファイルは、PuTTY Link SSHクライアントです。 VagrantはOpenSSH SSHクライアントとのみ互換性があります。

ただし、Windows 10では、Windows上のUbuntuにBashもあります。したがって、私はそれを次のコマンドで使用します。

ssh [email protected] -p2222 -i .vagrant/machines/default/virtualbox/private_key -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=Fatal

VagrantをWin10-Ubuntuにインストールするのは簡単ですが、何らかの理由でVirtualboxをインストールすることも望んでいます。

N.B. ssh default -F vagrant-ssh-configメソッドを試しましたが、

許可が拒否されました(publickey、password)。

これは、IdentityFileパスがWindowsパスであるのに対し、Bashでは/mnt/c/で始まる必要があるためだと推測しています。私はあなたがファイルを書き出すことができ、それがあなたのためにより良いのであればそれを修正することができると思います。

3
mpen

リモートユーザーがシステムにログインする方法を複製する方法があります

  1. 追加するインスタンスのVagrantfileを編集します

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

これにより、ホストにプライベートIPが追加されます(192.168の範囲で、まだ使用されていない限り、希望するものにします)

  1. コマンドラインからvagrant reloadを使用してインスタンスを再起動します
  2. Vagrant private_keyファイルを、ボックスで実行する必要のあるLinux同等物(たとえば、Windowsの場合はCygwin、私はWindows 10を使用)をcygwinホームディレクトリにコピーし、使用するホストを説明する名前に変更します例えば.

your_virtual_Host_name.pem

  1. .vagrant\machines\default\virtualbox\private_keyの下にキーがあります。

  2. ホームディレクトリに移動して、通常のUnix sshを実行します。

ssh -i your_virtual_hostname.pem [email protected]

ここで、ユーザー名は、標準のボックスを持っている場合は無意味になる可能性があります。ボックスのssh標準の詳細については、vagrant ssh-configの出力を参照してください。

それでおしまい

2
Jimbo

ssh vagrant@<Host>パスワード:vagrant

例:

2
Yeke

Vagrant~/.vagrant.d/insecure_private_keyに秘密鍵を格納し、それを使用してsshを介してすべてのマシンに接続します。ポート2200(デフォルト)に接続すると、次のようになります。

ssh vagrant@localhost -p 2200 -i ~/.vagrant.d/insecure_private_key

注:秘密鍵がVagrantを実行しているユーザーによって所有されていることを確認してください。

ただし、目的が マルチマシン環境 である場合は、config.vm.defineを使用して行うことができます。

以下は、2つのマシンが存在する環境を示す例です。1つはwebと呼ばれ、もう1つは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を使用できます。

2
Mulkave

Vagrant Hostのssh構成をssh構成に追加できます。

  1. Vagrantフォルダーでvagrantマシンのssh構成を取得します:vagrant ssh-config

  2. {UserDir}/.ssh/configを開き、前のコマンドの結果をそこに追加します。 :最初の行Host defaultは、後でsshコマンドに使用するエイリアスを意味します。浮浪者マシンまたはディレクトリとして名前を付けます。 vagrant dirが1つしかない場合-Host vagrantという名前を付けることができます

  3. 浮浪者へのSSH:ssh vagrant。姓は前のステップのエイリアスです。

1
FreeLightman

任意のssh-config引数を取り、-o Key=valueとしてコマンドラインでsshに渡すことができます。そのため、単純な1ホストのVagrantセットアップ(マルチホストセットアップの場合はgrepまたはPerlでもう少し作業が必要になる場合があります)には、次のようなことを行うことができます(またはPerl with sed必要な場合):

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

迷惑ホスト設定をローカルssh設定に追加できます。

  1. vagrant ssh-config >>〜/ .ssh/config

  2. ssh vagrant @ {Host}

例cat〜/ .ssh/config

Host kmaster
  HostName 127.0.0.1
  User vagrant
  Port 2222..
  ....
  • ssh vagrant @ kmaster
1

私の環境Win7 + Centosです。ほとんどの同意の答えは私にはうまくいきません。 ssh -p [port] [usrname]@127.0.01の試行後に失敗した後、XShellを使用して、迷惑ポートとユーザー名で新しいセッションを追加します。

動作します

Xshellは候補者かもしれません。

0
onebraveman