WinRMでの公開鍵認証
はい、WinRMでの公開鍵認証もサポートされています。ただし、公開鍵認証を使用するには、WinRMの設定やセキュリティ設定を適切に構成する必要があります。以下は、WinRMでの公開鍵認証の一般的な手順です。
- リモートWindowsマシンのWinRM設定:
- リモートWindowsマシンで
winrm quickconfigを実行して、WinRMを構成します。適切な設定が求められたら、それに従って設定してください。 winrm set winrm/config/service/auth @{Basic="true"}を実行して、基本認証を有効にします。
- リモートWindowsマシンで
- 公開鍵の生成:
- 公開鍵と秘密鍵のペアを生成します。SSHキーを使用する場合、
ssh-keygenコマンドを使用してキーペアを生成します。
- 公開鍵と秘密鍵のペアを生成します。SSHキーを使用する場合、
- 公開鍵の配置:
- 公開鍵をリモートWindowsマシンに配置します。これは、通常、リモートWindowsマシンの
.sshディレクトリにauthorized_keysファイルとして配置されます。
- 公開鍵をリモートWindowsマシンに配置します。これは、通常、リモートWindowsマシンの
- WinRMセキュリティ設定:
- WinRMのセキュリティ設定を変更して、公開鍵認証を有効にします。以下のコマンドを実行します。
arduino winrm set winrm/config/service/auth @{Basic="false"} winrm set winrm/config/service/auth @{Basic="true"} winrm set winrm/config/service @{AllowUnencrypted="false"}
- WinRMのセキュリティ設定を変更して、公開鍵認証を有効にします。以下のコマンドを実行します。
- リモート接続スクリプトの修正:
- Pythonスクリプトを修正して、公開鍵認証を使用してリモートWindowsマシンに接続します。
以下は、公開鍵認証を使用してWinRMを介してリモート接続するPythonスクリプトの一例です。pywinrm ライブラリを使用します。
python
import requests
from requests.auth import HTTPBasicAuth
import winrm
def run_command(hostname, username, private_key_path, command):
session = winrm.Session(
hostname,
auth=HTTPBasicAuth(username, ''),
server_cert_validation='ignore',
transport='ntlm',
keyfile=private_key_path,
certfile=private_key_path
)
encoded_ps = f"[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('{command}'))"
ps_script = f"$command = {encoded_ps}; Invoke-Expression $command"
encoded_ps_script = ps_script.encode('utf_16_le').decode('latin_1')
result = session.run_ps(encoded_ps_script)
print(f"Remote Command Output:n{result.std_out.decode('utf-8')}")
if __name__ == "__main__":
remote_hostname = "リモートWindowsマシンのIPアドレスまたはホスト名"
remote_username = "リモートWindowsマシンのユーザー名"
private_key_path = "生成したSSH秘密鍵のパス"
command_to_run = "ここに実行したいPowerShellコマンドを指定"
run_command(remote_hostname, remote_username, private_key_path, command_to_run)
このスクリプトでは、pywinrm ライブラリを使用してSSH秘密鍵を指定し、公開鍵認証を使用してリモートWindowsマシンに対してコマンドを実行します。

ディスカッション
コメント一覧
まだ、コメントがありません