web-dev-qa-db-ja.com

リモートWindowsマシンでのbashスクリプトの実行

ローカルLinuxマシンからリモートWindowsシステムでbashスクリプトを実行することを計画しています。このためには、ローカルマシンからWindowsマシンにログインして、bashスクリプトを実行する必要があります。

まず、これは可能ですか?はいの場合、どのようにそれを行うことができますか?

4
Mandar Shinde

これは、WindowsマシンにCygwinとopensshサーバーをインストールすることで実行できます。 Cygwinには、スクリプトを実行できるbashが付属しています。opensshはCygwinの下にインストールでき、Windowsマシンにリモートでログインできます。ログインする前に、scpを使用してスクリプトをWindowsマシンに転送し、sshで直接実行できます。

opensshは、cygwinセットアッププログラムを使用してインストールできます。詳細な手順については、 http://www.howtogeek.com/howto/41560/how-to-get-ssh-command-line-access-to-windows-7-using-cygwin/ を参照してください=

10
Daniel S.

@slmに同意しますが、これは境界線上の質問です。実は、Windowsには独自のリモートアクセスプロトコルが組み込まれており、Unixシステムには独自のプロトコルが組み込まれています。 Microsoft Powershellは、Vistaで導入されて以来、大幅に成熟しており、Windowsシステムでシェルスクリプトが実行することを期待するすべてのことを実行できるわけではありません。たとえば、 technet によると:

Windows PowerShellリモート処理機能は、WS-Managementプロトコルと、WindowsでWS-Managementを実装するWindowsリモート管理(WinRM)サービスによってサポートされています。 Windows 7以降を実行しているコンピューターには、WinRM 2.0以降が含まれています。以前のバージョンのWindowsを実行しているコンピューターでは、必要に応じて、サポートされている場合はWinRM 2.0以降をインストールする必要があります。現在、リモート処理は、Windows Vista Service Pack 1以降、Windows 7、Windows Server 2008、およびWindows Server 2008 Release 2でサポートされています。

もちろん、これをLinuxクライアントから利用するといくつかの問題が発生しますが、仮想マシンでそれらのほとんど、またはnetcatまたはsshプロキシ。私の穏やかな好奇心に5分の貢献と検索エンジンの使用、そして Pashプロジェクト を知りましたが、その有用性については何も主張しません。

UPDATE:

その穏やかな好奇心を再び楽しませる過程で、私は _Pash sourceforge page_ をもう一度訪れ、もう少し閲覧しました。その際、関連するRECOMMENDED PROJECTSには、@ slmが推奨するwinexeだけでなく、しかし、もう1つ、呼び出されたことは聞いたことがない _win-bash_ 。説明から:

Windows用の他のbashポートとは異なり(例:_cygwin bash_)、_win-bash_は、特別な環境やDLLを必要としません。1つのバイナリだけです。

_win-bash_プロジェクトの目標は、Windowsへの移植を完了し、を完全に提供することですWindows NTおよび派生システム用の機能_bash.exe_バイナリ。 _win-bash_は入力シェルとして使用でき、インタプリタを使用してUN *を実行できますXシェルスクリプト

この質問に関して私が上記について重要だと思うのは、そのスタンドアロンの性質です。ライブラリまたはレジストリの依存関係がない場合、Windows実行可能ファイルはリモートで実行できます-たとえばファイル共有から-インストールなしで。したがって、ネイティブのWindowsプロトコルを使用してマシンにリモートでアクセスすることが考えられます(winexeも含めて(または含めて))、を実行します。 powershellまたは_Net Use_コマンドを使用してファイル共有をマップし、_win-bash,_次に、共有のマップを解除して接続を終了します単一のファイルでさえコピーする必要はありませんリモートホストへ。

考えられると言いますが、それはうまくいきますか?わからないかもしれませんがただ見つけなさい。

現在のwin peイメージをシステムの[〜#〜] efi [〜#〜]パーティションに保持したいので、 rEFIndに利用できます(そしてiPXEハックのおかげで起動できます)。これまでのところ、デフォルトのWindowsインストールの開始をブロックするようにカスタマイズし、cmdプロンプトを開くように設定しました_netcat,_cygwinは私にはほとんど利益をもたらさない大変な仕事であるように見えましたが、今では以前の穏やかな好奇心が高まっています...私はおそらくそれを私のpe画像に追加した後、私の経験に関するレポートを返すでしょう。

END UPDATE

@slmはwinexeについて言及していますが、今は聞いたこともありませんが、今は興味があります。彼はまた、使用できるツールとしてwmicについて言及し、それは私が頻繁に使用したツールです。これにより、レジストリバックエンドへのかなり強力なアクセスが許可されますSQLに似た構文を使用します。

特定のルールに基づいて_.cmd_スクリプトを実行したい場合は、WindowsタスクマネージャとWindowsグループポリシーがあり、どちらも私が信じているように、 _wmic._を介して少なくともある程度影響を与えることができます

最後に、あるオペレーティングシステムから別のオペレーティングシステムへのコードの移植は、理由があるため、私たちが望むほど頻繁には行われないと言います。それは、その性質上問題があります。少なくともオペレーティングシステムが異なると、少なくともそれらが異なるため、動作は異なります。 sshたとえば、少なくとも私の経験では、Windowsの段階的なアクセス許可を処理することができず、システムレベルのアクセスが必要であるか、単に機能しませんでしたnetcatは、それを実行したユーザーアカウントのアクセス許可レベルを受け入れているようです。上で述べたように、Powershellは文字列の解析に使用すると非常に退屈なツールになる可能性があります。Unix環境では慣れているかもしれませんが、Powershellはすべてを独自のオブジェクトとして扱うためです。とても幸運。

2
mikeserv

sshを使用してリモートsshサーバーにアクセスし、コマンドを実行します。

例えば

ssh [email protected] command

WindowsマシンをSSHサーバーとして設定する方法を知りたい場合は、Windowsフォーラムへの質問です。ただし、cygwinとopen sshを使用することをお勧めするのは良い考えです。

1
X Tian

Cygwin + Windows上で実行できるように高度にカスタマイズする必要があるBashスクリプトを処理するためだけにCygwinを使用しないようにするでしょう。これは XY問題 によく似ています。

代わりに、Windowsネイティブのスクリプト言語で記述されたスクリプトの実行を指示するほうが適切です。 Windowsには、単純な.cmd VBスクリプト内の何かまでのファイル。

これらのソリューションはいずれも winexe を使用してLinuxシステムから実行できるため、スクリプトにアクセスできることを確認する以外に、Windowsシステムに何もインストールする必要はありません。

$ winexe -U "<user>%<pwd>" //192.168.1.2 'wmic bios get serialnumber'
$ winexe -U "<user>%<pwd>" //192.168.1.2 'C:\path\to\script.cmd'

参考文献

1
slm