リモートWindowsシステムのSSH+DIRコマンド

リモートWindowsシステムのSSH+DIRコマンド

Windows Server 2008 r2にOpenSSHをインストールし、公開鍵をそこにエクスポートしました。パスワードを入力しなくても正常に接続でき、接続に使用したコマンドラインにすでに存在するDIRコマンドを実行することもできます。

ssh user@ip-address "dir c:\testfolder"

ただし、名前にスペースが含まれているディレクトリに対してDIRコマンドを実行すると、次のようになります。

ssh user@ip-address "dir c:\test folder"

動作しません。

名前にスペースが含まれているフォルダからdirコマンドを実行する正しい方法を知っている人はいますか?よろしくお願いします。

答え1

プログラマーの友人が私にこの問題を解決する方法を教えてくれました。次のように二重引用符を使用して Windows シェルからパスを印刷するにはどうすればよいですか?

"c:\teste folder"

二重引用符は、SSH経由でWindowsにコマンドを送信するためにすでに使用されています。 Windowsシェルに二重引用符を送信するには、二重引用符でバックスラッシュを使用する必要があります。\"コマンドは次のとおりです。

ssh user@ip-address "dir \"c:\teste folder\""

これからも同じ質問をしてくださる方にお役に立てそうです。

参考資料

答え2

まず、引用符、シェルに有効なルール(コマンドはローカルbashで実行されますが、リモート側ではWindowsのcmd.exeなどの他のものを使用できます)を確認し、引用符をエスケープするときは次のことを行う必要があります。明示的に渡してください。さらに、外部ペアは解析中にしばしば削除/削除されます。

commandを使用すると、ssh user@ip-address "dir c:\\testfolder"bashはコマンドの3つの部分を表示します。

ssh
user@ip-address
dir c:\test folder

最後のアイテムの周りに引用符を含まないbashに特別な注意を払ってください!これは、この段階でbashが引用符を使用してbash自体に引用されたテキストを一部(bashのメモリ空間に文字列に格納されている)として解釈するように指示すると仮定するためです。

bashがsshにコマンドを渡すと、sshは最後の2つの部分であることをuser@ip-address確認しますdir c:\test folder。 shh は、最初の部分を使用して接続する場所を決定し、一度接続すると、2 番目の部分をそのままリモート側に渡します。覚えておいてください。しかし、引用符は削除されました。

リモート側では、sshd(sshデーモン/サービス)はそのデータを受け取り、cmd.exe(Windows側なので)に渡します。たとえば、2つの部分ではなく3つの部分です。

dir
c:\test
folder

これは私たちが望むものではありません。したがって、必要に応じてエスケープを使用して、あるコマンドから別のコマンドに引用符を渡す必要があります。一部のコマンドは処理時に引用符を削除し、他のコマンドはそのまま渡します。

したがって、正しく引用され、エスケープされた最終コマンドは次のようになります。

ssh user@ip-address "dir \"c:/test folder\""

また、この例では c:\ も c:/ に変更しました。最新のcmd.exeはほとんどの場所で/を受け入れるため、コマンドがエスケープシーケンス自体として解釈されるのを防ぐためにエスケープする必要がある古い問題を回避するのに役立ちます。 (「ハッカー」は、誤って設計されたアプリケーションから改行文字に拡張される「\ n」を挿入することで、コード挿入ツールでこの問題を長い間悪用してきました。)

「\」を保持している場合は、「\\」にエスケープする必要があります。 (参考に、この内容は非常によくある質問は本当に!この投稿が正しく表示されるようにするには、何度も編集する必要がありました。これは「地獄からの脱出」としても知られています。よりエスケープシーケンス Wiki エントリ詳細については。 )

Windowsの基本的な問題(ファイル名のスペース)を処理する別の方法があります。

  • このコマンドを使用して、ドライブ文字をフルパスにマッピングできますsubst。これは非常に長い経路を「短縮する」ためにもよく使われます。

    サブ gd:/an/insanely/long/path/to/my/personal/folder/of/favorite/games

常にフルパスを入力する代わりに、「g:」を使用できます。

  • 最新のWindowsシステムのNTFSでは、次のものを使用できます。NTFS再分析ポイント为名称中没有空格但指向有空格的文件(和文件夹)名称创建连接点和符号链接。有时,如果您的名称需要

関連情報