ssh
コマンドを使用してシェルスクリプト内でVagrantがVMに記録する方法を再現したいので、Vagrantインスタンスのエイリアスを作成します。
通常のssh
コマンドを使用してアクセスするためのコマンド構文は何ですか?
-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
すでに多くの答えがありますが、それらはすべて過度に複雑に見えるか、質問者が持っていない問題を解決します。
単に:
# save the config to a file
vagrant ssh-config > vagrant-ssh
# run ssh with the file.
ssh -F vagrant-ssh default
ターミナルランで
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
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 または別のフォルダー(設定されていない場合)を使用しますシステム。
私はこれを非常に簡単な方法で解決しました:vagrant boxを起動すると、このようなsshアドレスが表示されます
SSH address: 127.0.0.1:2222
次に、vagrantユーザー、ホスト、取得するポートを使用してボックスに接続できます
ssh [email protected] -p 2222
ssh
とともにstdinを使用する必要がない場合(たとえば、コマンドとログアウトのみを実行したい場合)、次を使用できます。
vagrant ssh-config --Host default | ssh -F /dev/stdin default
この方法は、 google groups に関する同様の質問に答えて提案されました。
残念ながら bashプロセス置換 も機能しません(詳細については nix.stackexchange のこの質問を参照してください)。
対話型のシェルが必要な場合の最適なオプションは、一時ファイルを作成し、ssh -F
で使用するか、他の回答で提案されているawk
を使用することです。
通常の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
最低限必要なコマンドをボックスに接続するだけの場合は、使用しているポート(vagrant up
を実行するときに表示される、またはvagrant ssh-config
を実行するときに表示されるポート)と、SSH秘密キー(また、 vagrant ssh-config
を実行すると表示されます)
次に、キーとポートを提供するだけです。
ssh -p 2222 -i $HOME/vagrantenv/.vagrant/machines/default/virtualbox/private_key [email protected]
他の多くの答えは、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/
で始まる必要があるためだと推測しています。私はあなたがファイルを書き出すことができ、それがあなたのためにより良いのであればそれを修正することができると思います。
リモートユーザーがシステムにログインする方法を複製する方法があります
config.vm.network "private_network", ip: "192.168.33.10"
これにより、ホストにプライベートIPが追加されます(192.168の範囲で、まだ使用されていない限り、希望するものにします)
your_virtual_Host_name.pem
.vagrant\machines\default\virtualbox\private_keyの下にキーがあります。
ホームディレクトリに移動して、通常のUnix sshを実行します。
ssh -i your_virtual_hostname.pem [email protected]
ここで、ユーザー名は、標準のボックスを持っている場合は無意味になる可能性があります。ボックスのssh標準の詳細については、vagrant ssh-configの出力を参照してください。
それでおしまい
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
を使用できます。
Vagrant Hostのssh構成をssh構成に追加できます。
Vagrantフォルダーでvagrantマシンのssh構成を取得します:vagrant ssh-config
{UserDir}/.ssh/config
を開き、前のコマンドの結果をそこに追加します。 注:最初の行Host default
は、後でssh
コマンドに使用するエイリアスを意味します。浮浪者マシンまたはディレクトリとして名前を付けます。 vagrant dirが1つしかない場合-Host vagrant
という名前を付けることができます
浮浪者へのSSH:ssh vagrant
。姓は前のステップのエイリアスです。
任意の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
迷惑ホスト設定をローカルssh設定に追加できます。
vagrant ssh-config >>〜/ .ssh/config
ssh vagrant @ {Host}
例cat〜/ .ssh/config
Host kmaster
HostName 127.0.0.1
User vagrant
Port 2222..
....
私の環境Win7 + Centosです。ほとんどの同意の答えは私にはうまくいきません。 ssh -p [port] [usrname]@127.0.01
の試行後に失敗した後、XShellを使用して、迷惑ポートとユーザー名で新しいセッションを追加します。
動作します
Xshellは候補者かもしれません。