迷子になった仮想マシンがあります。これを記録するためにvagrant ssh
コマンドを実行します。通常のコマンドを使用してログインしたいですssh
。vagrant ssh-config
適切な設定ファイルを出力します。
$ vagrant ssh-config
Host default
HostName 127.0.0.1
User vagrant
Port 2201
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /home/cbliard/.vagrant.d/insecure_private_key
IdentitiesOnly yes
LogLevel FATAL
この設定をファイルに出力し、 with ssh -F
: を使用すると、すべてがうまく動作します。
$ vagrant ssh-config > /tmp/config
$ ssh -F /tmp/config default
=> logged successfully
<(cmd)
一時構成ファイルが生成されないように、プロセス置換演算子を使用すると失敗します。
$ ssh -F <(vagrant ssh-config) default
Can't open user config file /proc/self/fd/11: No such file or directory
使用時に同じエラーが発生しました。<(cat /tmp/config)
$ ssh -F <(cat /tmp/config) default
Can't open user config file /proc/self/fd/11: No such file or directory
私はzshを使用しており、bashでも同じ動作を観察しています。私がここで何を間違っているのか?
答え1
注文する:
ssh -F <(vagrant ssh-config) default
vagrant
パイプに接続されている標準出力を使用して、別々のプロセスでコマンドを実行します。パイプのもう一方の端は、n
実行中の新しいプロセスにファイル記述子(あなたの場合は11)で接続され、ssh
シェルが実行されます。
ssh -F /proc/self/fd/n default
ssh
これは、起動時にファイル記述子が閉じられていない場合にのみ機能します。
残念ながらそうです。
使用される場合のもう1つのアプローチは、パイプと一時ファイルを使用せずに代わりに一時ファイルを使用するプロセス代替形式をzsh
使用することです。=(...)
/proc/self/fd
ssh
あるいは、閉じられていないファイル記述子を使用することもできます。たとえば、何も指定しない場合ssh
(リモートコマンドがstdinから何も読み取らない場合)、fd
0を使用できます。たとえば、次のようになります。
vagrant ssh-config | ssh -F /dev/stdin -n default
答え2
@cbliardベース
これは働きます:
ssh -F =(vagrant ssh-config ) -i =(generate ssh-identity)