ssh
コマンドを使用してVagrantがシェルスクリプト内でVMにログを記録する方法を再現したいので、Vagrantインスタンスのエイリアスを作成します。
通常のssh
コマンドを使用してそれにアクセスするためのコマンド構文は何ですか?
vagrant ssh-config
。
ssh
コマンドを使用してVagrantがシェルスクリプト内でVMにログを記録する方法を再現したいので、Vagrantインスタンスのエイリアスを作成します。
通常のssh
コマンドを使用してそれにアクセスするためのコマンド構文は何ですか?
vagrant ssh-config
。
回答:
"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
ssh
、Vagrantfile
ディレクトリの外部から(「通常のssh
コマンドを使用して」)Vagrantにアクセスすることはできません。これが私が質問を解釈した方法です。
auto_correct: true
設定で選びます。手動で変更する方法
Host
エントリー。修正されたコマンドは次のとおりです。ssh $(vagrant ssh-config | 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
ファイルを追加することに注意してください.gitignore
。
zsh
ssh -F =(vagrant ssh-config) default
-F
が簡単ではない自動化ソリューションでも機能する簡単な方法です
~/.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を使用して他にどのようにそれを実行したのかわかりません。
ターミナルで
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
パラメータを指定vagrant ssh-config
しssh
て、全体を構成ファイルとして渡すだけ-F configfile
です。接続するホストのエイリアスは、の最初の行で定義されていvagrant ssh-config
ます。Host default
はと接続できることを意味しますssh default
。
標準入力から構成ファイルを読み取るオプションが見つからなかったため、一時ファイルのルートを使用しました。次に、一時$TMPDIR.vagrant-ssh-config
ファイルも後でクリーンアップするワンライナーを示します。Vagrantfile
vagrant 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/
(現在)に展開されます。システムで設定されていない場合は、別の 変数または別のフォルダーを使用します。
ssh -F <(vagrant ssh-config)
zsh:zshプロセスの置換 ssh -F =(vagrant ssh-config)
私はこれを非常に簡単な方法で解決しました:vagrantボックスを開始すると、次のようなsshアドレスが表示されます
SSH address: 127.0.0.1:2222
次に、取得したvagrantユーザー、ホスト、ポートを使用してボックスに接続できます
ssh vagrant@127.0.0.1 -p 2222
vagrant
あなたは、標準入力を使用する必要がない場合にssh
は、使用でき(たとえば、あなただけのコマンドとログアウトを実行したいです):
vagrant ssh-config --host default | ssh -F /dev/stdin default
この方法は、Googleグループに関する同様の質問への回答として提案されました。
残念ながら、bashプロセスの置換も機能しません(詳細については、unix.stackexchangeに関するこの質問を参照してください)。
インタラクティブシェルが必要な場合は、一時ファイルを作成し、ssh -F
それを使用するかawk
、他の回答で提案されているように使用するのが最善の方法です。
他の多くの回答は、Vagrantがインストールされていることを前提としています。
Windows 10にVagrantをインストールしましたがvagrant ssh
、SSHクライアントとしてPuTTyを使用しているためインストールできません。このVagrant は受け入れません。
ssh
PATHで実行可能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/
ます。私はあなたがファイルを書き出し、それがあなたのためにうまくいくならそれを修正することができると思います。
ローカルのssh構成にvagrantホスト構成を追加できます。
vagrant ssh-config >>〜/ .ssh / config
ssh vagrant @ {host}
例。猫〜/ .ssh / config
Host kmaster
HostName 127.0.0.1
User vagrant
Port 2222..
....
リモートユーザーがシステムにログインする方法を複製する方法があります
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 username@192.168.33.10
ユーザー名。標準のボックスがある場合は迷惑な場合があります。ボックスのssh標準の詳細については、vagrant ssh-configの出力を確認してください。
それでおしまい
.vagrant
フォルダはしたがって、ルートによって所有されています。また、ファイルの権限はrw -------だったので、rootだけがキーファイルを読み取る権限を持っていました。おそらくこれは誰にとっても役立つかもしれません。
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 web
とvagrant provision databases
。
vagrantホストのssh構成をssh構成に追加できます。
vagrantフォルダー内のvagrantマシンのssh構成を取得します。 vagrant ssh-config
{UserDir}/.ssh/config
前のコマンドの結果を開き、そこに追加します。注:最初の行Host default
は、後でssh
コマンドに使用するエイリアスを意味します。迷惑なマシンまたはディレクトリとして名前を付けます。vagrant dirが1つしかない場合は、名前を付けることができますHost vagrant
浮浪者へのSSH: ssh vagrant
。姓は、前のステップのエイリアスです。