最終更新日:2020年8月20日
Windows 版 OpenSSH が登場したので使い方を解説してみる
お知らせ
Windows 10のアップデートで、Windows 10では正式版の OpenSSH サーバーを立ち上げられるようになりました。詳しくは以下の記事をご参照ください。
はじめに
Windows を SSH でコマンドラインから制御したいという要望は、Windows のサーバー管理者の長い間の願いでした。2015年の6月頃に Microsoft が OpenSSH を Windows に移植すると発表して大分経ちましたが、数日前、ようやくプレリリース版がリリースされました。
この記事では、 Windows 版の OpenSSH の使い方を解説します。なお、プレリリース版での解説なので、正式版が登場した場合には仕様が変わっている可能性があることをご了承ください。正式版は 2016年前半にリリースが予定されています。
目次
事前準備
以下のサイトより、OpenSSH-Win32.zip ファイルをダウンロードして ZIP ファイルを展開します。ここでは、 C:\OpenSSH-Win32 に展開したとして解説していきます。
OpenSSH サーバーの設定
ホストキーの生成
OpenSSH サーバーのホストキーを下記コマンドで生成します。コマンド実行時にパスフレーズを聞かれますが、何も入力しないで Enter キーを入力します。
> cd c:\OpenSSH-Win32 > ssh-keygen.exe -t rsa -f ssh_host_rsa_key > ssh-keygen.exe -t dsa -f ssh_host_dsa_key > ssh-keygen.exe -t ecdsa -f ssh_host_ecdsa_key > ssh-keygen.exe -t ed25519 -f ssh_host_ed25519_key
ファイアウォールの設定
次に Windows のファイアウォール の SSH の 22番ポートを開放します。PowerShell を管理者権限で起動して、以下のコマンドを実行します。
> New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -Action Allow -DisplayName SSH
SSH デーモンをシステム権限で実行する方法
ここで c:\OpenSSH-Win32 にある、setup-ssh-lsa.cmd を管理者権限で実行し、Windows を再起動します。
その後、SysInternals から PSTools をダウンロードして、ZIP ファイルを展開後、以下のコマンドを実行します。
> psexec.exe -i -s cmd.exe
すると子ウィンドウが表示されるので、 sshd.exe をその画面で実行します。
> cd c:\OpenSSH-Win32 > sshd.exe
なお、以下のようにもコマンドを実行可能です。
> psexec -s cmd.exe /c "cd "c:\openssh-win32" && sshd.exe"
これにより、タスクスケジューラで Windows の起動時に OpenSSH を実行することが可能になります。
Admin 権限で SSH デーモンを実行する方法
secpol.msc を実行(ファイルを指定して実行等)して、ローカルセキュリティポリシーを起動します。
その後、ローカルポリシー >> ユーザー権限の割り当て >> プロセスレベルトークンの置き換え で、OpenSSH サーバーを実行する Admin 権限を持つユーザーを追加後、一度、ログアウトして、ログオンし直します。
それから管理者権限でコマンドプロンプトを起動し、sshd.exe を実行します。
なお、現時点ではこの方法では公開鍵認証によるログインはうまくいかないようです。
OpenSSH クライアントの利用方法
通常のログイン方法
Windows 版 OpenSSH は、コマンドプロンプトを起動して、以下のようにサーバーにログインします。
> cd c:\OpenSSH-Win32 > #WorkGroup ユーザーの場合 > ssh.exe user@host > #ドメインユーザーの場合 > ssh.exe -l user@domain host
ログイン後は、普通の DOS コマンドを実行できるようになります。
また、PowerShell を起動してログインした場合は、PowerShell のコマンドを実行できます。
なお、Mac のターミナルからログインしたら日本語が文字化けしてしまいました。これはエンコーディングが UTF-8 になっているためです。Windows 版 の OpenSSH ではエンコーディングを Shift_JIS にする必要があります。
公開鍵認証によるログイン
OpenSSH サーバーの設定
公開鍵認証によるログインを行うためには、まず OpenSSH の設定を変更する必要があります。
c:\OpenSSH-Win32 に、sshd_config ファイルがあるので、これをまず編集します。
#コメントを外す #PubkeyAuthentication yes PubkeyAuthentication yes
設定を保存したら、OpenSSH を再起動します。
公開鍵認証の設定
以下のコマンドで公開鍵・秘密鍵のキーペアを作成します。
> cd c:\OpenSSH-Win32 > ssh-keygen.exe -t rsa -f id_rsa
公開鍵(id_rsa.pub)は各ユーザの以下のフォルダに authorized_keys という名前で保存します。(.ssh フォルダはユーザーごとに作成)
> cd c:\users\%username% > mkdir .ssh > copy c:\OpenSSH-Win32\id_rsa.pub .ssh\authorized_keys
これで設定が済んだので、公開鍵認証によるログインを以下のように行います。
> cd c:\OpenSSH-Win32 > #WorkGroup ユーザーの場合 > ssh.exe -i .\id_rsa user@host > #ドメインユーザーの場合 > ssh.exe -i .\id_rsa -l user@domain host
SFTP の設定
Windows 版 OpenSSH には、SFTP の機能も実装されています。
SFTP サーバーは、sftp-server.exe のバイナリで、OpenSSH のサブシステムとして提供されます。そのため、設定ファイルは OpenSSH と同じ sshd_config を使用します。
SFTP サーバーを使用するためには、sshd_config を以下のように編集する必要があります。
#設定に合わせる #Subsystem sftp /usr/libexec/sftp-server Subsystem sftp C:\OpenSSH-Win32\sftp-server.exe
編集が済んだら、OpenSSHを再起動します。SFTP サーバーも自動的に再起動されます。
SFTP クライアントの利用方法
SFTP サーバーには、基本的に OpenSSH サーバーと同じ要領でログインします。
> cd c:\OpenSSH-Win32 > #通常ログインの場合 > sftp.exe user@host > #公開鍵認証によるログインの場合 > sftp.exe -i .\id_rsa user@host
なお、OpenSSH では C:\ からアクセスできましたが、SFTP では C:\ がルート扱いになっており、/OpenSSH-Win32 というようにアクセスする必要があるのでご注意ください。分かるまではまりました。
SFTP には他にも以下のコマンドがあります。
- pwd : リモートのカレントパスを表示
- lpwd : ローカルのカレントパスを表示
- cd : リモートのパスを変更
- lcd : ローカルのパスを変更(\ は \\ にする必要あり)
- get file1.txt : リモートからローカルにファイルをダウンロード
- put file1.txt : ローカルからリモートにファイルをアップロード
- exit : 終了
おわりに
Windows 版の OpenSSH の機能を解説してきましたが、いかがだったでしょうか。基本的な機能は実装されていますし、プレリリースということを考えると、なかなかよくできていると思います。
Windows で OpenSSH を利用できるようになることで、リモートからサーバーを操作したり、バッチを走らせることができるようになりますね。可能性が広がるので今後に期待です。
参考サイト
スポンサーリンク
カテゴリー:ブログ
コメントを残す