以前から気になっていたので、SSHを触ってみました。
SSHとは
sshは、SSHクライアントで入力したコマンドが、暗号化された通信経路を通ってサーバーに伝わりSSHサーバー(SSHD)がコマンドを実行します。クライアントとサーバーの認証方式としては公開鍵認証が使われます。(もちろん、パスワード認証もできますが、セキュリティレベルは低くなります。)
WindowsではSSHの環境を構成するサービスとして次の2つがあります。
ssh-agent(OpenSSH Authentication Agent)
初期状態:無効
ssh-agent 公開鍵認証用の秘密鍵のパスフレーズの管理サービス
sshd(OpenSSH SSH Server)
初期状態:手動
SSHのサーバー機能を提供するサービス(OpenSSHサーバーをインストールすると追加される。)
SSHで接続する
コマンドライン(cmd.exe)で次のコマンドを入力することで、SSHDに接続することができる。コマンド実行後、指定したユーザーのパスワードを入力すれば接続できる。SSH サーバーのユーザー@サーバー名
※初回接続時にサーバーの身元を表すキーを登録するか聞かれるメッセージが表示される。
サーバーのユーザー
サーバーのOSにログインできるアカウントでドメイン部分は次のように省略される。
省略した結果、重複した場合は、ローカルユーザーが優先される。
マイクロソフトアカウント(例:aaa@outlook.jp) → aaa
ドメインユーザー(例:aaa@company.co.jp) → aaa
ローカルユーザー(例:aaa) → aaaサーバー名
サーバーのホスト名でもIPでもどちらでも構わない
OpenSSH サーバー(sshd)のインストール
①設定アプリから「OpenSSHサーバー」を選択する。
②SSHDサービスが待ち受ける22番ポートをファイアウォールの例外に追加する。
netsh advfirewall firewall add rule name="sshd" dir=in action=allow protocol=TCP localport=20022 profile=private
③SSHDサービスを開始する。
net start sshd
sc start sshd
sc config sshd start= Auto
sshdをインストールしてもSSHDサービスは自動で開始しないため、インストールしただけでは、他のSSHクライアントから、勝手に接続されることはない。
④SSHDの状態確認
試しに自分自身で接続してみる。
ssh localhost
ssh localhost
SSHDサービスの状態確認
sc qc sshd
[SC] QueryServiceConfig SUCCESS
SERVICE_NAME: sshd
TYPE : 10 WIN32_OWN_PROCESS
START_TYPE : 3 DEMAND_START
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME : C:\Windows\System32\OpenSSH\sshd.exe
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : OpenSSH SSH Server
DEPENDENCIES :
SERVICE_START_NAME : LocalSystem
OpenSSH サーバー(sshd)の各種ファイルの場所
C:\ProgramData\ssh\sshd_config
SSHDサーバーの設定ファイル。ログも同じ階層にある。
C:\Windows\System32\OpenSSH\sshd_config_default
設定ファイルの初期値ファイル。同じ階層にsshd.exeの実態もある。
SSHクライアントが過去に接続したことがあるSSHDサーバーのホストキーの一覧
OpenSSH サーバー(sshd)のセキュリティを強化する設定
SSHの歴史は古く過去との互換性のため、初期値は比較的セキュリティレベルが低いため、状況に合わせてsshd_config修正する。sshd_configファイル変更後は、SSHDサーバーを再起動すれば設定が反映される。Protocol 2
プロトコルバージョン1にしか対応しないSSHクライアントはほぼ存在しないため、2に限定する。
PermitRootLogin no
root ログインの禁止
WindowsのSSHDサーバーでは、最初からサーバーのOSにログインできるアカウントで認証されるので、rootログインは不要
空のパスワードユーザのリモートログインを拒否
AllowUsers foo hoge fuga
接続ユーザを制限(例では、foo、hoge、fugaの3ユーザー)
Port 22000
ポート番号22には、攻撃のターゲットになりやすいため
ClientAliveCountMax 0
アイドル状態(無応答状態)が指定した時間を過ぎると「Write failed: Broken pipe 」と表示しログアウトする。
パスワード認証禁止(公開鍵認証のみにする。)
1接続あたりの最大認証回数の制限
scpについて
SCPは、内部でSSHを使ってファイルを転送するコマンドです。
転送元ファイルはscpコマンドを実行したマシンになります。「転送元ファイルに転送元ユーザー@転送元サーバー」を記載すれば、転送元もリモートのサーバーにすることもできます。
scp 転送元ファイル 転送先ユーザー@転送先サーバー:C:/foo/転送ファイル.txt
ファイルパスの区切りは「\」ではなく「/」にした方がよいです。sshdサーバーがwindows以外の時は「/」にしないとエラーにはならないがファイルが作られないという不思議な状態になることがあります。
転送先ファイルは、常に上書きされます。
SSH接続時のエラーの対処
Host key verification failedSSHDサーバーのホストキーが、以前SSHクライアントが接続したときに保存したキーと異なっているため、SSHDサーバーのなりすまし防止のため発生したエラー
通常は次のコマンドで更新するのですが、Windows環境では「Updating known_hosts is not supported in Windows yet.」エラーとなり、ホストキーの書き換えができない。
ssh-keygen -R ルーターIP
SSH接続時のエラーメッセージ中にある通り次のエラーメッセージ部分に記載された「known_hosts」ファイルを直接修正する。(エラーメッセージ中のパスは、\マークが2重になっているので1つに書き直す。)
Add correct host key in C:\\Users\\ユーザー名/.ssh/known_hosts to get rid of this message.
参考
プロトコルバージョンを2に限定 root ログインの禁止 パスワード方式の許可/禁止 接続ユーザを制限 最大試行回数を制限
http://www14.plala.or.jp/campus-note/vine_linux/server_ssh/sshd_config.html
OpenSSHサーバーがWindows10に正式にやってきた(April 2018 Update/1803) | Webセキュリティの小部屋
https://www.websec-room.com/2018/05/12/2933
SSHサーバへ接続出来ない・遅い時の原因と対処法 | 俺的備忘録 〜なんかいろいろ〜
https://orebibou.com/2014/12/ssh%E3%82%B5%E3%83%BC%E3%83%90%E3%81%B8%E6%8E%A5%E7%B6%9A%E5%87%BA%E6%9D%A5%E3%81%AA%E3%81%84%E3%83%BB%E9%81%85%E3%81%84%E6%99%82%E3%81%AE%E5%8E%9F%E5%9B%A0%E3%81%A8%E5%AF%BE%E5%87%A6%E6%B3%95/
SSH接続エラー回避方法:.ssh/known_hostsから特定のホストを削除する/削除しないで対処する3つの方法
https://qiita.com/grgrjnjn/items/8ca33b64ea0406e12938
0 件のコメント:
コメントを投稿