WindowsでOpenSSHを使ってSSHサーバーの起動と接続をする方法~PowerShell編
はじめに
WindowsのPowerShellで使えるOpenSSHがリリースされています。今回は、このパッケージをインストールし、PowerShellを使って、WindowsでSSH Serverの起動及び、SSH Serverの接続を試みてみたいと思います。なお、私は、Windows初心者ですので、なにか間違いがありましたら、教えてくれると嬉しいです。あと、コマンドプロンプトの表示はWindowsのパスが分かりにくいので一部省略しています。
OpenSSH
Download : Pre-release
OpenSSHのインストール
一応、PowerShell用のインストールスクリプトを書いておきます。これで、Install-openssh
コマンドが使えるようになります。実行すると、$env:programfiles\OpenSSH-Win32
にインストールされ、パスが追加されます。
function Install-Openssh {
param ( $TempDir="$env:temp\opensshInstall" )
if(!(Test-Path -Path $TempDir -PathType Container))
{
$null = New-Item -Type Directory -Path $TempDir -Force
}
$client = new-object System.Net.WebClient
$client.DownloadFile("https://github.com/PowerShell/Win32-OpenSSH/releases/download/10_13_2015/OpenSSH-Win32.zip", "$TempDir\OpenSSH-Win32.zip" )
Expand-Archive -Path $TempDir\OpenSSH-Win32.zip -DestinationPath $env:programfiles
$Env:Path += ";$env:programfiles\OpenSSH-Win32"
[Environment]::SetEnvironmentVariable('PATH', $Env:Path, 'Machine')
}
注意: ダウンロードするファイルはreleases/download/10_13_2015
でのみ有効なので注意してください。
PowerSHell
PowerShellの基本
まず、バージョンを確認しましょう。見ての通り、PowerShellではいくつかの環境変数が予め設定されていますので、適時使用することで、コマンド短縮に活用できます。また、エイリアスもLinuxコマンドと同じものが幾つか設定されていますので、とりあえずLinuxコマンドを知っている人は、PowerShellを知らなくても叩いてみると良いかもしれません。
C:> $PSversionTable
PowerShellは、基本的に、管理者権限で実行するのと、通常ユーザーで実行するのとでは挙動が異なる場合があります。管理者権限で実行するには、以下のコマンドを実行してみてください。
C:> Start-Process powershell.exe -Verb runas
また、管理者権限でスクリプトの実行ポリシーを変更しておくと、エラー警告が出にくくなります。何らかのスクリプトが実行できないようなときは試してみてください。
C:> Set-ExecutionPolicy RemoteSigned
実行ポリシーの確認は以下のとおり。
C:> Get-ExecutionPolicy
項目 | 内容 |
---|---|
Restricted | すべてのスクリプトが実行禁止 |
AllSigned | 署名されているスクリプトのみが実行可能 |
RemoteSigned | ローカルに保存されているスクリプトは実行可能 |
Unrestricted | すべてのスクリプトが実行可 |
Chocolatey
非公式のパッケージマネージャーです。PowerShellの最新バージョンをインストールしたい場合は、こちらのほうが手軽です。
C:> choco install powershell -pre
C:> iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))
そのうち、Win32-OpenSSH
が追加されそうです。といっても、ダウンロードして、C¥Program¥ Files¥
に解凍し、パスを追加するだけですが。
PowerShell用のインスールスクリプトの解説
再びの解説になります。
一応、PowerShell用のインストールスクリプトを書いておきます。これで、Install-openssh
コマンドが使えるようになります。
function Install-Openssh {
param ( $TempDir="$env:temp\opensshInstall" )
if(!(Test-Path -Path $TempDir -PathType Container))
{
$null = New-Item -Type Directory -Path $TempDir -Force
}
$client = new-object System.Net.WebClient
$client.DownloadFile("https://github.com/PowerShell/Win32-OpenSSH/releases/download/10_13_2015/OpenSSH-Win32.zip", "$TempDir\OpenSSH-Win32.zip" )
Expand-Archive -Path $TempDir\OpenSSH-Win32.zip -DestinationPath $env:programfiles
$Env:Path += ";$env:programfiles\OpenSSH-Win32"
[Environment]::SetEnvironmentVariable('PATH', $Env:Path, 'Machine')
}
これをPowerShellで直接入力するか(Enter x2)、ファイルinstall-openssh.ps
にでもして実行してください。
そして、先ほど作ったInstall-openssh
コマンドを実行します。すると、c:¥Program Files¥OpenSSH-Win32
にインストールされ、パスが追加されるはず...。パスが追加されると、ssh.exe
コマンドなどが直接使えるようになります。
# 現在のプロセスにパスを追加する
$Env:Path += ";$env:programfiles\OpenSSH-Win32"
# 永続的にパスを追加する(Windows環境変数を書き換える)
$Env:Path += ";$env:programfiles\OpenSSH-Win32"
[Environment]::SetEnvironmentVariable('PATH', $Env:Path, 'Machine')
ちなみに、$env:programfiles
は、x86の場合、c:¥Program Files(x86)
になります。注意してください。
OpenSSHでサーバーを立てる
SSHサーバーを立てる
# なんかよくわからなけど、鍵の作成
C:> cd $env:programfiles\OpenSSH-Win32
C:> ssh-keygen.exe -t rsa -f ssh_host_rsa_key
C:> ssh-keygen.exe -t dsa -f ssh_host_dsa_key
C:> ssh-keygen.exe -t ecdsa -f ssh_host_ecdsa_key
C:> ssh-keygen.exe -t ed25519 -f ssh_host_ed25519_key
# ファイアウォールの設定, ローカルポート22を開けている
C:> New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -Action Allow -DisplayName SSH
# バックグラウンドで起動するコマンドを追加するウィンドウを表示する, なお、sysinternals(ps tool)が必要になるのでインストールしておくこと, 当該ツールをインストールした後は、psexec.exeがあるフォルダへのパスを追加するか、そこにcdで移動すると実行可能になります
# https://technet.microsoft.com/en-us/sysinternals/bb897553
C:> psexec.exe -i -s cmd.exe
# バックグラウンドでSSHサーバーを起動する, psexec.exeで立ち上げたcmd.exeにてsshd.exeを実行することで、SSHサーバーであるsshd.exeのバックグラウンド起動を追加することが可能
C:> sshd.exe
PsToolsのインストール(psexec.exeを含む)
PsToolsのインストールが面倒な方は、こんな感じのコマンドを実行します。
function Install-Pstools {
param ( $TempDir="$env:temp\pstoolsinstall" )
if(!(Test-Path -Path $TempDir -PathType Container))
{
$null = New-Item -Type Directory -Path $TempDir -Force
}
$client = new-object System.Net.WebClient
$client.DownloadFile("https://download.sysinternals.com/files/PSTools.zip", "$TempDir\PSTools.zip" )
$null = New-Item -Type Directory -Path $env:programfiles\PSTools -Force
Expand-Archive -Path $TempDir\PSTools.zip -DestinationPath $env:programfiles\PSTools
$Env:Path += ";$env:programfiles\PSTools"
[Environment]::SetEnvironmentVariable('PATH', $Env:Path, 'Machine')
}
C:> Install-pstools
SSHサーバーの設定
OpenSSHを使っている方なら知っていると思いますが、sshd_config
を編集します。これは、c:¥Program Files¥Open-SSH¥sshd_config
にあります。
#公開鍵ログイン
PubkeyAuthentication yes
参考:
OpenSSHでサーバーへ接続する
# 通常の設定でパスワードによるアクセスをする
C:> ssh.exe user@host
C:> ssh.exe -l user@domain host
# 鍵の作成を行う
# 公開鍵と秘密鍵の作成, -fオプションは、鍵ファイルを置く場所とファイル名を指定している, カレントディレクトリに id_rsa(秘密鍵)と id_rsa.pub(公開鍵) が作成される
C:> ssh-keygen.exe -t rsa -f id_rsa
# 公開鍵の登録, これは先ほど作成した id_rsa.pub をサーバーの %systemdrive%\users\user\\.ssh\authorized_keys に置くことで登録します
# 鍵でアクセスする
# サーバーに公開鍵が登録されていると、以下のコマンド -i オプションで秘密鍵を指定し、ログインできるようになります
C:> ssh.exe -i .\id_rsa user@host
C:> ssh.exe -i .\id_rsa -l user@domain host
パスワードを設定していない場合は、Ctrl+Alt+Delete
で設定します。この場合、古いパスワードは空。
参考:
Author And Source
この問題について(WindowsでOpenSSHを使ってSSHサーバーの起動と接続をする方法~PowerShell編), 我々は、より多くの情報をここで見つけました https://qiita.com/syui/items/9cd191a3395a6ebf48c1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .