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


149

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

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


あなたが実際に何を求めているのですか?私は3つの異なることが尋ねられているのがわかります。おそらく、質問を展開してから、移行のフラグを立てることができます。ありがとう。
Kev

3
デフォルトでは、-22であるVMのsshポートは、ホストマシンの2222に転送されます。私はSSHで127.0.0.1とポート2222にパテを入れました、そしてそれはうまくいきました!
Vishal Biyani 2012年

8
複数のボックスを実行している場合、そのポート番号は自動的に変更されます。を実行することで、正しいものを取得できますvagrant ssh-config
ステファノパラッツォ

回答:


108

"vagrant 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

複数のvagrantホストがある場合を考慮して、目的のホストを選択し、構成から空白行を削除します(sedを使用)。

HOST=name-of-my-host
ssh $(vagrant ssh-config $HOST | sed '/^[[:space:]]*$/d' |  awk 'NR>1 {print " -o "$1"="$2}') localhost

3
この回答ではsshVagrantfileディレクトリの外部から(「通常のsshコマンドを使用して」)Vagrantにアクセスすることはできません。これが私が質問を解釈した方法です。
sjy

自分でポートを設定できます。したがって、スクリプトは任意のディレクトリから実行可能になります。
Yser

それで、そのポートをマシンに入る方法にしているのは何ですか?ポートの構成はどこにありますか?
15年

1
バグラントは未使用のものをauto_correct: true設定で選びます。手動で変更する方法
Stefano Palazzo

1
つまり、最初の行をスキップする必要がありました。Hostエントリー。修正されたコマンドは次のとおりです。ssh $(vagrant ssh-config | awk 'NR>1 {print " -o "$1"="$2}') localhost
kgadek

148

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

単に:

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

# run ssh with the file.
ssh -F vagrant-ssh default

2
すごい。でvagrant-sshファイルを追加することに注意してください.gitignore
sashaegorov

5
一部のシェル(例zshssh -F =(vagrant ssh-config) default
:)

4
この結果を構成sshファイルにエコーしたいvagrant ssh-config >> ~/.ssh/config場合があります:なのでssh default、システムのどこからでも実行defaultできます。は、ここで
adamczi

@adamcziに感謝します。これは、sshパラメータを追加するの-Fが簡単ではない自動化ソリューションでも機能する簡単な方法です
laimison

3
~/.ssh/config@adamcziが提案する方法でにエントリを追加することにより、Visual Studio Code Remote-SSH拡張を使用してVagrant VMにSSHで接続し、ファイルを編集してリモート開発を行うことができます。単にCMD-SHIFT-Pを押してから「Remote-SSH:Connect to Host ...」と追加したssh .configエントリが自動的にリストに表示されます-選択して実行するだけで、vscodeがリモートのvagrant vmに接続します。構成エントリアプローチがないと、vscodeを使用して他にどのようにそれを実行したのかわかりません。
abulka

52

ターミナルで

vagrant ssh

別のターミナルウィンドウ/タブで

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

Sequel ProなどのSQL GUI接続など、他の理由でssh用のvagrantのホストが必要な場合は、非常に便利です。これは私を救います!
Atomox

19

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

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

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


3
bashまたはzshを使用している場合、プロセス置換は、あるコマンドの出力を別のコマンドに渡す最も簡単な方法です。bash:ssh -F <(vagrant ssh-config) zsh:zshプロセスの置換 ssh -F =(vagrant ssh-config)
myeeshen

@myshen:@tyrionによる回答によるとプロセス置換はssh -Fbash では機能しません-あなたが言及する方法はzshでも機能するはずです。
Joel Purra、2014

ダン、私は本当にbashは言うまでもなく、浮浪者を実際に使用する方法を学ぶ必要があります。
スペンサーウィリアムズ

14

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

SSH address: 127.0.0.1:2222

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

ssh vagrant@127.0.0.1 -p 2222

1
いいね!また、通常、迷惑なユーザーのパスワードはvagrant
Brad Parksが

7

あなたは、標準入力を使用する必要がない場合sshは、使用でき(たとえば、あなただけのコマンドとログアウトを実行したいです):

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

この方法は、Googleグループに関する同様の質問への回答として提案されました。

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

インタラクティブシェルが必要な場合は、一時ファイルを作成し、ssh -Fそれを使用するかawk、他の回答で提案されているように使用するのが最善の方法です。


5

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

正確に医者が命じたもの... Thx。
ゼノイド2018

4

最小限のコマンドでボックスに接続したいだけの場合は、それが使用しているポート(を実行する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


4

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

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

sshPATHで実行可能FOUNDは、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をインストールすることも求められます。

注意:私はこのssh default -F vagrant-ssh-config方法を試しましたが、

権限が拒否されました(公開鍵、パスワード)。

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


4

ローカルのssh構成にvagrantホスト構成を追加できます。

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

  2. ssh vagrant @ {host}

例。猫〜/ .ssh / config

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

3

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

  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 username@192.168.33.10

ユーザー名。標準のボックスがある場合は迷惑な場合があります。ボックスのssh標準の詳細については、vagrant ssh-configの出力を確認してください。

それでおしまい


ありがとう、他の場所からvagrantからキーファイルをコピーするという考えのおかげで、私はどのような問題があるのか​​を理解しました-Linuxでlibvirtプロバイダーを使用しました。libvirtのプロバイダとあなたが初期化する必要があるため、これは重要である浮浪者にsudoとし、内のすべてのファイル.vagrantフォルダはしたがって、ルートによって所有されています。また、ファイルの権限はrw -------だったので、rootだけがキーファイルを読み取る権限を持っていました。おそらくこれは誰にとっても役立つかもしれません。
TomasH

2

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

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

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

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

2台のマシンが存在する環境を示す例を次に示します。一方は呼び出さ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 ssh webvagrant provision databases


古いマシンを「プライマリ」にした場合、1台のマシンの構成を2台のマシンの構成に変更できますか?
15年

2

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

例:

  • ssh vagrant@vagrant.local

  • またはIPを確認した後(内部から、を使用vagrant sshssh vagrant@172.28.128.3


2

vagrantホストの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

任意のssh-config引数を取り、コマンドラインでsshに渡すことができます-o Key=value。だから、簡単なワンホスト放浪セットアップのために(あなたが少しより多くの仕事をしなければならないかもしれませんgrepperl、あなたは以下のような何かを行うことができますマルチホストのセットアップのために)(または交換perlsedしたい場合):

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

0

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

できます。

たぶんXshellは候補です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.