ローカルディレクトリをリモートのsshサーバーにマウントしたい。特に〜/ .gnupgディレクトリなので、リモートに保存しなくても、どこでもローカルキーリングを使用できます。
だから私はこの解決策だと思います:
私はこれを私のssh/configに入れました:
Host remote
HostName remotehost
RemoteForward 10000 localhost:22
User user
PermitLocalCommand yes
LocalCommand sshfs -p 10000 [email protected]:/Users/remoteuser/.gnupg .gnupg
sshを実行すると、次のようになります。
Fuse: bad mount point `.gnupg': No such file or directory
sshログイン後にsshfsを手動で実行した場合、すべてが正常に機能します。したがって、LocalCommandディレクティブはRemoteForwardの前に実行されると思います。
これを解決する方法は?
問題:ssh
のLocalCommand
は、ローカル(クライアント)側で実行されますが、リモートではありません。 RemoteCommand
オプションはありませんが、設定ファイルに機能をハックすることができます。これらはすべて、remotehost:.gnupg
ディレクトリが事前に存在することを前提としていることに注意してください。
オプション1:~/.ssh/config
で2つの別々のホスト仕様を使用します:
Host remote
HostName remotehost
PermitLocalCommand yes
LocalCommand ssh -f %r@%n-mount -p %p sshfs -p 10000 %u@localhost:%d/.gnupg .gnupg
Host remote-mount
HostName remotehost
ForwardAgent yes
RemoteForward 10000 localhost:22
欠点:このマウントポイントが必要なeachホストの両方のエントリを終了する必要があります。
オプション2:sshオプションとポート転送をLocalCommandに結合します。
Host remote
HostName remotehost
PermitLocalCommand yes
LocalCommand ssh -f %r@%h -o RemoteForward="10000 localhost:22" -o ForwardAgent=yes -p %p sshfs -p 10000 %u@localhost:%d/.gnupg .gnupg
2つのLocalCommand
行の微妙な違いは、最初の例では%nを使用し、2番目の例では%hを使用していることに注意してください。これは機能しますが、1つの巨大な[〜#〜]仮定[〜#〜]があります:あなた[〜 #〜] never [〜#〜]sshは、実際の名前で、.ssh/config
ファイルに存在する「短い名前」を介してのみホストに送信されます。そうしないと、最終的には終了します。 ssh
を実行しようとするLocalCommand
接続の無限ループで。
オプション3:SSH多重化を使用して、リモートへの接続を1つだけ設定します。
Host remote
HostName remotehost
PermitLocalCommand yes
LocalCommand ssh -f %r@%h -o RemoteForward="10000 localhost:22" -o ForwardAgent=yes -p %p sshfs -p 10000 %u@localhost:%d/.gnupg .gnupg
ControlMaster auto
ControlPersist 30m
ControlPath ~/.ssh/controlmasters/%r@%h:%p
これが唯一の勝利の解決策であり、Host *
ルールでも機能し、マイナス面もありません。同じホストへの2番目のsshセッションがsshfsを介して同じディレクトリを再マウントしようとしないという問題も解決します。
警告:私が解決するのに苦労しなかった最後の問題:リモートホストからログアウトした後もリモートsshfs
は長く続く。実際、ローカルホストがオフラインになるか、接続が切断されない限り、unmount
になることはありません。
おそらく このようなアイデア を使用して、リモートホストからログアウトするときにumount
マウントするsshfs
の他のオプションを検討できます。または、LocalCommand
を使用してゲームをプレイし、トリガーイベントが発生したことを確認した後、監視して自己マウントするものを実行することもできますが、せいぜい壊れやすいようです。
もう1つのオプションは、ssh
コマンドをシェルでラップするか、ProxyCommand
を使用してトリッキーなことを行うことですが、これは読者の練習問題として残しておきます。