Cygwinを使ってSSHサーバを作成する

| | コメント(8) | トラックバック(8)

Cygwinを使ってSSHサーバを作成する方法です。
本来は「/etc/passwd」や「/etc/group」ファイルの中身を確認するようだけど、ここでは概要だけ。。。

クライアント側については触れていません。
クライアント側は ssh-host-config スクリプトを使って鍵を作成したりできるようだけど、既に自分の鍵は持っていたし。

なので、ここではサーバ側だけ。

CygwinでOpenSSHをインストール

CYGWIN環境変数には「ntsec nosmbntsec glob」を設定しました。

Cygwinで「cygrunsrv」と「openssh」をインストールします。

「cygrunsrv」は、Cygwin に移植された UNIX デーモンプログラムを NT/2000/XP 上のサービスとして動作させるための、サービススタータプログラムです。

ssh-host-config

管理者権限を持っているアカウントで「ssh-host-config」スクリプトを実行してホスト側の設定をします。

# サーバにおいて
$ ssh-host-config
Generating /etc/ssh_host_key
Generating /etc/ssh_host_rsa_key
Generating /etc/ssh_host_dsa_key
Generating /etc/ssh_config file
Privilege separation is set to yes by default since OpenSSH 3.3.
However, this requires a non-privileged account called 'sshd'.
For more info on privilege separation read /usr/doc/openssh/README.privsep.
 
Shall privilege separation be used? (yes/no) yes
Warning: The following function requires administrator privileges!
Shall this script create a local user 'sshd' on this machine? (yes/no) yes
Generating /etc/sshd_config file
Added ssh to /cygdrive/c/WINDOWS/system32/drivers/etc/services
 
Do you want to install sshd as service?
(Say "no" if it's already installed as service) (yes/no) yes
 
Which value should the environment variable CYGWIN have when
sshd starts? It's recommended to set at least "ntsec" to be
able to change user context without password.
Default is "binmode ntsec tty".  CYGWIN=binmode ntsec tty
 
The service has been installed under LocalSystem account.
 
Host configuration finished. Have fun!

これにより、以下の設定が行われます。

  • 「/etc/ssh_host_key」「/etc/ssh_host_rsa_key」「/etc/ssh_host_dsa_key」「/etc/ssh_config」「/etc/sshd_config」が作られます。
  • 特権を分離します。
  • 「sshd」というローカルアカウントを作成します。
  • Windowsにサービスとしてsshdが登録されます。(表示名「CYGWIN sshd」)

(2004/09/06 追記 ここから)
MBSA 1.2.1 で調べると「sshd」ユーザのパスワードが「脆弱」って出ました。
手を打った方がいいかも。
(2004/09/06 追記 ここまで)

SSHデーモンの設定ファイル

SSHデーモンの設定ファイル「/etc/sshd_config」を適切に書き換えます。
あくまでも例なので、自分の環境にあった設定にすること。

$ ls -l /etc/sshd_config
-rw-r--r--    1 SYSTEM   なし         2427 Sep 13 10:02 /etc/sshd_config

↑これでは、rootがいないCygwinでは編集ができないのでは?

# サーバにおいて
$ chmod 664 /etc/sshd_config
$ vi /etc/sshd_config   # 編集
$ chmod 644 /etc/sshd_config

と、今回はしました。

・rootのssh接続を拒否する
デフォルト状態のOpenSSHはrootからのSSH接続が可能になっているためこれを拒否します。

PermitRootLogin no

・CYGWIN=ntsecにした場合
セキュリティ上の理由。

StrictModes yes

・rhosts認証関係の設定
これらの設定が有効な場合、通信内容は暗号化されるが、認証は「~/.rhosts」などで行われるため危険です。
なので、これを無効にします。

RhostsAuthentication no
RhostsRSAAuthentication no
IgnoreRhosts yes

・パスワード認証を許可しない

PasswordAuthentication no
ChallengeResponseAuthentication no

・パスワードが設定されていないアカウントを拒否する

PermitEmptyPasswords no

・AllowUsersを追加しユーザhogeにだけ接続許可する

AllowUsers hoge

・管理者権限を持つ ID などの Login を禁ずる

DenyUsers Administrator root guest 

サービス「CYGWIN sshd」の開始

では、SSHDのサービスを起動しましょう。
以下の方法で、コマンドラインからサービスの状態を変更できます。

# サーバにおいて
$ cygrunsrv -S sshd  # サービス開始
$ cygrunsrv -E sshd  # サービス停止
$ cygrunsrv -R sshd  # サービスアンインストール

または、コントロールパネルのサービスからサービスを開始します。

デバッグ用のサービスを登録する方法

うまくいかない時用にデバッグモードのサービスを登録しておくと便利かもしれません。
以下のようにすると、「/var/log/sshd_debugmode.log」にログが出力され、一度アクセスされる度にサービスが停止するサービスが登録されるようです。

# サーバにおいて
$ cygrunsrv -I sshd_debugmode \
-d "CYGWIN sshd DEBUG MODE" -p /usr/sbin/sshd \
-a "-Dddde" -e "CYGWIN=binmode tty ntsec" -t manual

SSHの鍵ペアを用意する (クライアント用)

クライアントのSSHの鍵ペアを用意します。
Cygwinのssh-keygenコマンドを使って鍵ペアを作成しました。

OpenSSH1 の鍵作成とサーバへの登録

ssh-keygenコマンドで鍵を作成します

# クライアントにおいて
# 「-C」オプションは公開鍵に表示されるコメント
# 管理しやすくするためのもの
$ ssh-keygen -b 1024 -t rsa1 -C username@hostname
Generating public/private rsa1 key pair.
Enter file in which to save the key (/home/hoge/.ssh/identity): # Enter入力
Created directory '/home/hoge/.ssh'.
Enter passphrase (empty for no passphrase): # パスフレーズを入力
Enter same passphrase again:                # パスフレーズを入力(確認)
Your identification has been saved in /home/hoge/.ssh/identity.
Your public key has been saved in /home/hoge/.ssh/identity.pub.
The key fingerprint is:
18:52:1a:8d:b9:2d:8c:b6:72:a9:aa:dc:18:f1:8f:14 username@hostname

クライアントのSSH公開鍵をサーバに登録します。
何らかの方法でサーバにSSH公開鍵を持っていきます。
サーバの「~/tmp/identity.pub」にコピーしたとします。

# サーバにおいて
$ cat ~/tmp/identity.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

OpenSSH2 の鍵作成とサーバへの登録

クライアントのSSHの鍵ペアを用意します。
Cygwinのssh-keygenコマンドを使って鍵ペアを作成しました。

# クライアントにおいて (DSA)
$ ssh-keygen -b 1024 -t dsa -C username@hostname
Generating public/private dsa key pair.
Enter file in which to save the key (/home/hoge/.ssh/id_dsa): # Enter入力
Enter passphrase (empty for no passphrase): # パスフレーズを入力
Enter same passphrase again:                # パスフレーズを入力(確認)
Your identification has been saved in /home/hoge/.ssh/id_dsa.
Your public key has been saved in /home/hoge/.ssh/id_dsa.pub.
The key fingerprint is:
99:58:15:a5:fc:3d:da:15:75:23:22:a2:91:bd:db:2b username@hostname

または

# クライアントにおいて (RSA)
$ ssh-keygen -b 1024 -t rsa -C username@hostname
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hoge/.ssh/id_rsa): # Enter入力
Enter passphrase (empty for no passphrase): # パスフレーズを入力
Enter same passphrase again:                # パスフレーズを入力(確認)
Your identification has been saved in /home/hoge/.ssh/id_rsa.
Your public key has been saved in /home/hoge/.ssh/id_rsa.pub.
The key fingerprint is:
15:ac:82:19:ae:cb:5d:d2:18:22:72:54:38:a5:72:11 username@hostname

クライアントのSSH公開鍵をサーバに登録します。
何らかの方法でサーバにSSH公開鍵を持っていきます。
サーバの「~/tmp/id_dsa.pub」or「~/tmp/id_rsa.pub」にコピーしたとします。

# サーバにおいて (DSA)
$ cat ~/tmp/id_dsa.pub >> ~/.ssh/authorized_keys2
$ chmod 600 ~/.ssh/authorized_keys2

または

# サーバにおいて (RSA)
$ cat ~/tmp/id_rsa.pub >> ~/.ssh/authorized_keys2
$ chmod 600 ~/.ssh/authorized_keys2

接続してみる

以下のようになり接続ができませんでした。

# クライアントにおいて
# OpenSSH1の鍵を使って接続してみる
$ ssh -1 hostname
Permission denied.

「-vv」オプションをつけると、詳細なやり取りが見れます。

そこで、いくつかのファイルのアクセス権を変更しました。 (※2008/09/13 追記 も参照のこと!)

# サーバにおいて
$ chmod 755 /home/hoge
$ chmod 755 /home/hoge/.ssh
$ chmod 644 /home/hoge/.ssh/authorized_keys
$ chmod 644 /home/hoge/.ssh/authorized_keys2

ちなみに、
公開鍵は 644
秘密鍵は 600
にしました。

これで接続できるようになりました。

# クライアントにおいて
# OpenSSH1の鍵を使う
$ ssh -1 hostname
# OpenSSH2の鍵(DSA)を使う
$ ssh -2 -i ~/.ssh/id_dsa hostname
# OpenSSH2の鍵(RSA)を使う
$ ssh -2 -i ~/.ssh/id_rsa hostname

authorized_keysが他人から見えちゃうのは、公開鍵の集まりとはいえ気分はよくないな・・・。

普通は「authorized_keys」「authorized_keys2」は600にしておかないといけないと思ったけど、勘違いだったかな?

(2004/10/20 追記 ここから)
勘違いかも。
「~/.ssh/」は、744
「authorized_keys」は、644
「identity」は 600
が普通かも。
「authorized_keys」をオーナーしか触れなかったら、認証前にチェックする時困るってことになる?
今度よく、本家サイトなどで調べる事。 確認してみました。後述。
(2004/10/20 追記 ここまで)

(2008/09/13 追記 ここから)

本家ではこうなってました。

典型的な原因は、$HOME, $HOME/.ssh または $HOME/.ssh/authorized_keys が、 sshd がデフォルトで許可するよりもゆるいパーミッションで置かれていることです。

このような場合は、サーバ側でつぎのようなコマンドを実行してください。
$ chmod go-w $HOME $HOME/.ssh
$ chmod 600 $HOME/.ssh/authorized_keys
3.14 - 公開鍵を authorized_keys にコピーしたんだけど、まだ公開鍵認証がうまくいかない。 - OpenSSH FAQ

「authorized_keys」は、600 の方がいいっぽい。

(2008/09/13 追記 ここまで)

今度入れ直す事があったらやってみようっと (2004/03/27 追記)
ファイルのアクセス権に関して。

 cacls `cygpath -w ファイル名`

「cacls」は「C:\windows\system32\」
「cygpath」は「/usr/bin/」
にある。

リンク (2007/01/06 追記)

・Stray Penguin - Linux Memo (sshd)
http://www.asahi-net.or.jp/~aa4t-nngk/sshd.html
sshd_configの設定内容の説明などなど

トラックバック(8)

このブログ記事を参照しているブログ一覧: Cygwinを使ってSSHサーバを作成する

このブログ記事に対するトラックバックURL: http://kinshachi.ddo.jp/mt/mt-tb.cgi/48

» Cygwin(PukiWiki/TrackBack 0.1)~のトラックバック

Cygwin インストールメモ non sugar 目次 † 目次 はじめに システム環境変数 ユーザー環境変数 Cygwinのインストール bash のプロンプトを変更 /cygdrive -> / sshd のセットアップ cron のセットアップ wget lv ~/.bashrc 任意の... 続きを読む

» 推薦blog(neweden)~のトラックバック

推薦blog 続きを読む

» Tools/Cygwin/インストール(PukiWiki/TrackBack 0.2)~のトラックバック

PrevTools/Cygwin NextTools/Ethereal HomeUp Cygwin インストールメモ non sugar 目次 † 目次 はじめに システム環境変数 ユーザー環境変数 Cygwinのインストール コマンド プロンプトの簡易編集モードを有効にする。 bash のプロンプトを... 続きを読む

» Synergy と SSH(不定期日誌)~のトラックバック

とりあえずメモ Mouse・Keyboard共有ツールSynergyは、クリップボードのない用も共有してくれる便利なツールですが、基本的にそのデータは生のままネットワークを流れます。これって自宅の場合はいいけど会社とかのネットワークだとちょっと気持ち悪い。外に繋がった場所... 続きを読む

» OpenSSHでブルースクリーン(Gotz Island)~のトラックバック

ちょっと、ネット上に公開しているサーバとデータをやりとりしたいんだが、FTPじゃセキュリティ上不安なので、SFTPを使うためにOpenSSHを入れてみた。OSは 続きを読む

» CygwinでSSHサーバを作成する方法(ようこそ。このろくでもない世界へ。)~のトラックバック

http://kinshachi.ddo.jp/kurage/html/MT/comp/archives/000290.html 続きを読む

» Cygwin での ssh 設定(IT Harmony)~のトラックバック

Cygwin とは、UNIX系ツールの多くを Windows OS 上で実行可能... 続きを読む

» Diary/2008-07-13(TAMA Networks (PukiWiki/TrackBack 0.4))~のトラックバック

GeForce6600 を入れてみた。 #ref(): File not found: "rural_am00b.png" at ... 続きを読む

コメント(8)

JUN :

この記事はとても参考になりました

ike :

ありがとうございます。^o^
最近なかなか更新できないけど、今月はがんばろうと思います。
よろしく!

Yugo :

丁寧な解説ですね!ぜひ参考にさせていただきます。

ike :

Yugoさん。
どもども、参考になれば幸いです:)。

ひげちん :

大変わかりやすくて参考になりました。
これからも頑張って下さい!!

ike :

ひげちんさん。ありがとう。
ひげちんさんも、がんばってー。

Anonymous :

「○○のためにこう書き換える。」
「このままだとこうなる。」
とかがとてもわかりやすくて助かりました。
また参考にさせてもらいます。

ike :

ななしさん。
参考になったなら良かったです^^
多分、、あってると思うのですがー(え?)

コメントする


画像の中に見える文字を入力してください。

このブログ記事について

このページは、ikeが2003年9月13日 13:38に書いたブログ記事です。

ひとつ前のブログ記事は「MD5メッセージ・ダイジェストの計算・チェック」です。

次のブログ記事は「IME Watcher for Windows XP」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

最近のコメント

On Cygwinを使ってSSHサーバを作成する
  • ike: ななしさん。 参考になったなら良かったで
  • 匿名: 「○○のためにこう書き換える。」 「この
  • ike: ひげちんさん。ありがとう。 ひげちんさん
  • ひげちん: 大変わかりやすくて参考になりました。 こ
  • ike: Yugoさん。 どもども、参考になれば幸
  • Yugo: 丁寧な解説ですね!ぜひ参考にさせていただ
  • ike: ありがとうございます。^o^ 最近なかな
  • JUN: この記事はとても参考になりました
Powered by Movable Type 4.261