Windows 同士で SSH 接続 公開キー認証の設定方法

Windows > Windows 同士で SSH 接続 公開キー認証の設定方法

Windows 間でSSH 通信を行うための手順。

用意するもの。

OpenSSH
解凍してOpenSSH-Win64とかのフォルダ名をOpenSSHにリネームしてとりあえず C:/ に設置してパスを通してください。

ファイル編集用にvim
インストールしてパスを通します。

各インストールが終了したらコンピューターを再起動してパスを反映させます。

管理者としてPowershellを起動させます。

パスが反映されている筈ですのでカレントはそのままで構いません。

署名のないローカルスクリプトの実行を許可します。

Set-ExecutionPolicy RemoteSigned

双方通信を行いたいので sshd(サーバー機能)もインストールしておきます。

install-sshd

sshd のインストールが完了したら ssh-agent と sshd を起動させてみます。

ssh-agent net start sshd

もし sshd が起動できない場合(エラー1067等)は C:\OpenSSH フォルダのプロパティ→セキュリティを確認し、Authenticated Users の編集で書き込みを拒否に設定すれば sshd が起動するようになります。

ssh-agent と sshd のスタートアップ自動実行の設定を行います。

Set-Service ssh-agent -StartupType Automatic Set-Service sshd -StartupType Automatic

22番ポートを開放。

new-netfirewallrule -protocol tcp -localport 22 -direction inbound -action allow -displayname OpenSSH

ここまでの作業を両方の Windows で行います。

パスワード認証で接続
どちら側からでもよいのでコマンドプロンプトを管理者ではなく普通に起動させ下記コマンドを入力してみます。

ssh

コマンド使用のヒントみたいなのが出てきたら OK です。

実際に接続してみます。

ssh ユーザー名@コンピューター名 又は IPアドレス

ユーザー名はサーバー側に設定されているユーザー名で、コンピューター名も同じくサーバー側に設定されているコンピューター名で、ホスト名やIPアドレスでも構いません。

接続されたタイミングで相手側コンピューターの C:/Users/ユーザー名/ に .ssh フォルダが作成されます。

パスワード入力でサーバー側のコンピューターのコマンドプロンプトに切り替わったら、パスワード認証による接続は OK です。

exit でクライアント側に戻ります。

exit

今度は逆のパターンでサーバー側からクライアント側に接続してみます。(コマンドプロンプトを管理者ではなく普通に起動)

問題なく接続できれば、これでパスワード認証による交互通信が可能になりました。

パスワード認証から公開キー認証に切り替える
キー認証に切り替えることで、よりセキュアに通信を行えることに加え、面倒なパスワード入力からも解放されます。

認証用のキーの作成に関しての作業は管理者ではなく普通に起動させたコマンドプロンプト上で行ってください。

どちら側からでもよいので認証用のキーペアを作成します。(OpenSSHのパスが通っているのでカレントはどこでも構いません)

ssh-keygen -t rsa

デフォルトでC:/Users/ユーザー名/.ssh/ に id_rsa(秘密キー)とid_rsa.pub(公開キー)が作成されます。

ここで任意のキー名にするのでしたら任意のキー名をフルパスで記入してください。

C:/Users/ユーザー名/.ssh/pc1_rsa

上の例ですと C:/Users/ユーザー名/.ssh/ に pc1_rsa(秘密キー) と pc1_rsa.pub(公開キー) が作成されます。

パスフレーズの入力を求められますが、何も入力せずにそのままEnter でも構いません。

よりセキュアな通信をお望みでしたら入力してください。

ユーザーフォルダ内の.sshフォルダに移動します。

cd \users/ユーザー名/.ssh

キーペアが作成されていることを確認します。

dir

キーエージェントに作成した秘密キーを追加します。

ssh-add

任意のキー名を指定して作成した場合は

ssh-add 秘密キー名

と入力してください。

scp で id_rsa.pub(公開キー)のコピーをサーバー側の .ssh フォルダに転送します。

scp id_rsa.pub ユーザー名@コンピューター名、又は IPアドレス:.ssh

ここでは、まだパスワード認証による接続で転送します。

サーバー側での操作

.sshフォルダに移動。

cd \Users/ユーザー名/.ssh

クライアント側から届いた id_rsa.pub の内容を authorized_keys に追記します。

type id_rsa.pub >> authorized_keys

authorized_keys が存在しない場合は自動的に作成されます。

クライアント側から接続してみます。

ssh ユーザー名@コンピューター名 又は IPアドレス

パスワード入力を求められずに接続できれば成功です。

双方の .ssh/ にある id_rsa.pub は削除してしまっても構いません。

よりセキュアに通信するには
SSH は通常 22 番ポートを使用しますが、よりセキュアに 22 番ポート以外を使用して通信することも可能です。

サーバー側で管理者権限で Powershell を起動させ、22222番ポート(任意)を開放します。

New-NetFirewallRule -Protocol TCP -LocalPort 22222 -Direction Inbound -Action Allow -DisplayName OpenSSH

vim でサーバー側の sshd_config を編集します。

vim C:/ProgramData/ssh/sshd_config

#Port 22の下あたりに下記を追加します。

Port 22222

sshd を再起動させます。

restart-service sshd

より簡単にアクセスできるようにする

クライアント側の .ssh/ に下記内容の config ファイルを設置します。

Host 任意の接続名 HostName ホスト(コンピューター名) User ユーザー名 Port 22222 IdentityFile ~/.ssh/id_rsa

こうすることで単純に

ssh 任意の接続名

で接続できるようになります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です