ホスト名 SSH_SERVER (192.168.100.10) に SSHd をインストールし、ホスト名 SSH_CLIENT から接続する。
鍵ペアは SSH2 の ECDSA と ED25519 の2種類でログイン出来るようにする。
SSHサーバー側の設定
必要なパッケージをインストールする。
$ apt-cyg install cygrunsrv openssh
管理者権限で起動した Cygwin ターミナルから ssh-host-config を実行する。
ちなみに、この「ssh-host-config」スクリプト内で実行される「csih_*」は、「/usr/share/csih/cygwin-service-installation-helper.sh」内に記述されている。エラーが出たら、この辺を含めて読んでいくと良さそう。
また、-d オプションを付けて実行するとデバッグモードで動作する。
Cygwinターミナルを「管理者として実行」して起動する。
sshd サービスは、特権アカウント cyg_server で実行するように設定される。
$ ssh-host-config ssh-keygen: generating new host keys: RSA1 RSA DSA ECDSA ED25519 *** Info: Creating default /etc/ssh_config file *** Info: Creating default /etc/sshd_config file *** Info: Privilege separation is set to yes by default since OpenSSH 3.3. *** Info: However, this requires a non-privileged account called 'sshd'. *** Info: For more info on privilege separation read /usr/share/doc/openssh/README.privsep. *** Query: Should privilege separation be used? (yes/no) yes #← 「privilege separation」を使用する *** Info: Note that creating a new user requires that the current account have *** Info: Administrator privileges. Should this script attempt to create a *** Query: new local account 'sshd'? (yes/no) yes #← non-privileged のsshdという新しいローカルアカウントを作成する *** Info: Updating /etc/sshd_config file *** Query: Do you want to install sshd as a service? *** Query: (Say "no" if it is already installed as a service) (yes/no) yes #← サービスとしてsshdをインストールする *** Query: Enter the value of CYGWIN for the daemon: [] #← 詳細不明。昔使っていた binmode ntsec tty は今は Obsolete されている *** Info: On Windows Server 2003, Windows Vista, and above, the *** Info: SYSTEM account cannot setuid to other users -- a capability *** Info: sshd requires. You need to have or to create a privileged *** Info: account. This script will help you do so. *** Info: You appear to be running Windows XP 64bit, Windows 2003 Server, *** Info: or later. On these systems, it's not possible to use the LocalSystem *** Info: account for services that can change the user id without an *** Info: explicit password (such as passwordless logins [e.g. public key *** Info: authentication] via sshd). *** Info: If you want to enable that functionality, it's required to create *** Info: a new account with special privileges (unless a similar account *** Info: already exists). This account is then used to run these special *** Info: servers. *** Info: Note that creating a new user requires that the current account *** Info: have Administrator privileges itself. *** Info: No privileged account could be found. *** Info: This script plans to use 'cyg_server'. *** Info: 'cyg_server' will only be used by registered services. *** Query: Do you want to use a different name? (yes/no) no #← SYSTEM アカウントは他のユーザへ setuid できないので(また、その他の理由で)、特権アカウントを作る必要がある。 *** Query: Create new privileged user account 'cyg_server'? (yes/no) yes #← 新しい特権ユーザ'cyg_server'を作成する *** Info: Please enter a password for new user cyg_server. Please be sure *** Info: that this password matches the password rules given on your system. *** Info: Entering no password will exit the configuration. *** Query: Please enter the password: ******** #← cyg_server のパスワードを設定 *** Query: Reenter: ******** #← cyg_server のパスワードを再入力 *** Info: User 'cyg_server' has been created with password '********'. *** Info: If you change the password, please remember also to change the *** Info: password for the installed services which use (or will soon use) *** Info: the 'cyg_server' account. *** Info: Also keep in mind that the user 'cyg_server' needs read permissions *** Info: on all users' relevant files for the services running as 'cyg_server'. *** Info: In particular, for the sshd server all users' .ssh/authorized_keys *** Info: files must have appropriate permissions to allow public key *** Info: authentication. (Re-)running ssh-user-config for each user will set *** Info: these permissions correctly. [Similar restrictions apply, for *** Info: instance, for .rhosts files if the rshd server is running, etc]. *** Info: The sshd service has been installed under the 'cyg_server' *** Info: account. To start the service now, call `net start sshd' or *** Info: `cygrunsrv -S sshd'. Otherwise, it will start automatically *** Info: after the next reboot. *** Info: Host configuration finished. Have fun!
ちなみに、Cygwinターミナルを「管理者として実行」しないと以下の警告を受ける
$ ssh-host-config *** Warning: Running this script typically requires administrator privileges! *** Warning: However, it seems your account does not have these privileges. *** Warning: Here's the list of groups in your user token: None Users *** Warning: This usually means you're running this script from a non-admin *** Warning: desktop session, or in a non-elevated shell under UAC control. *** Warning: Make sure you have the appropriate privileges right now, *** Warning: otherwise parts of this script will probably fail! *** Query: Are you sure you want to continue? (Say "no" if you're not sure *** Query: you have the required privileges) (yes/no) no #← 実行しない *** Info: Ok. Exiting. Make sure to switch to an administrative account *** Info: or to start this script from an elevated shell.スクリプトで作成されたユーザを確認する。
「sshd」「cyg_server」が作られている。
C:\>net user \\SSH_SERVER のユーザー アカウント ------------------------------------------------------------------------- Administrator cyg_server Guest hogeuser sshd コマンドは正常に終了しました。sshd サービスの登録状態を確認する。
$ cygrunsrv --verbose -Q sshd Service : sshd Display name : CYGWIN sshd Current State : Stopped Command : /usr/sbin/sshd -D stdin path : /dev/null stdout path : /var/log/sshd.log stderr path : /var/log/sshd.log Process Type : Own Process Startup : Automatic Dependencies : tcpip Account : .\cyg_server
sshdの設定ファイル (/etc/sshd_config) を編集
$ ls -l /etc/sshd_config -rw-r--r-- 1 cyg_server root 3.6K 8月 7 09:21 /etc/sshd_config $ grep -v "^#" /etc/sshd_config | grep -v "^$" Port 22 Protocol 2 # SSH1 は使用せず、SSH2に固定 HostKey /etc/ssh_host_ecdsa_key # ECDSA と HostKey /etc/ssh_host_ed25519_key # ED25519 のみ受け付ける PermitRootLogin no # rootのログインを許可しない StrictModes no AuthorizedKeysFile .ssh/authorized_keys2 # SSH2 用 PasswordAuthentication no # パスワード認証を使わない ChallengeResponseAuthentication no UsePrivilegeSeparation sandbox # Default for new installations. Subsystem sftp /usr/sbin/sftp-server AllowUsers hogeuser # 許可するユーザー DenyUsers Administrator cyg_server Guest sshd # 許可しないユーザー
sshd サービスを起動する
C:\> net start sshd または $ cygrunsrv -S sshd または 「サービス」から「起動」 または Windows起動時に自動起動
管理者権限で起動したコマンドプロンプトからサービスを起動/停止してみる
C:\> net start "CYGWIN sshd" CYGWIN sshd サービスを開始します. CYGWIN sshd サービスは正常に開始されました。 C:\> net stop "CYGWIN sshd" CYGWIN sshd サービスを停止中です. CYGWIN sshd サービスは正常に停止されました。
SSHクライアント側の設定
必要なパッケージをインストールする。
$ apt-cyg install openssh
クライアントの鍵ペアを作成する (一般ユーザのCygwin ターミナルで)
ssh-user-config スクリプトで作成してみる
$ ssh-user-config *** Query: Shall I create a SSH2 RSA identity file for you? (yes/no) no #← SSH2 RSA鍵を作らない *** Query: Shall I create a SSH2 DSA identity file for you? (yes/no) yes #← SSH2 DSA鍵を作る *** Info: Generating /home/hogeuser/.ssh/id_dsa Enter passphrase (empty for no passphrase): ******** #← SSH2 DSA鍵のパスフレーズを設定 Enter same passphrase again: ******** #← SSH2 DSA鍵のパスフレーズを再入力 *** Query: Do you want to use this identity to login to this machine? (yes/no) no #← 手動で登録するので authorized_keys に登録しなかった *** Query: Shall I create a SSH2 ECDSA identity file for you? (yes/no) yes #← SSH2 ECDSA鍵を作る *** Info: Generating /home/hogeuser/.ssh/id_ecdsa Enter passphrase (empty for no passphrase): ******** #← SSH2 ECDSA鍵パスフレーズを設定 Enter same passphrase again: ******** #← SSH2 ECDSA鍵パスフレーズを再入力 *** Query: Do you want to use this identity to login to this machine? (yes/no) no #← 手動で登録するので authorized_keys に登録しなかった *** Query: Shall I create a (deprecated) SSH1 RSA identity file for you? (yes/no) no #← SSH1 RSA鍵を作らない *** Info: Configuration finished. Have fun!
ssh-keygen コマンドで作成してみる (ssh-user-config スクリプトを使わずに)
# SSH2 ED25519鍵を作る # -t : 作成する鍵のタイプ (RSA1 RSA DSA ECDSA ED25519 など) # -C : コメント $ ssh-keygen -t ED25519 -C hogeuser@ssh_server-20140807 Generating public/private ED25519 key pair. Enter file in which to save the key (/home/hogeuser/.ssh/id_ed25519) #← エンター Enter passphrase (empty for no passphrase): ******** #← パスフレーズ設定 Enter same passphrase again: ******** #← パスフレーズ再入力 Your identification has been saved in /home/hogeuser/.ssh/id_ed25519. Your public key has been saved in /home/hogeuser/.ssh/id_ed25519.pub. The key fingerprint is: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX hogeuser@ssh_server-20140807 The key's randomart image is: +--[ED25519 256--+ | . .E o | |+ . .+ . . | | + o . oo = | | + o+ . . o | | ..S . o . | | . == | |. + | | | | | +-----------------+ $ cat ~/.ssh/id_ed25519 -----BEGIN OPENSSH PRIVATE KEY----- b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jYmMAAAAGYmNyeXB0AAAAGAAAABDtGYMLK/ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX jri73Gp8d3ZH88rA== -----END OPENSSH PRIVATE KEY----- $ cat ~/.ssh/id_ed25519.pub ssh-ed25519 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX9cV67GyM hogeuser@ssh_server-20140807
作成されたファイルを確認する。
$ ls -l ~/.ssh
-rw------- 1 hogeuser None 751 8月 7 09:50 id_dsa -rw-r--r-- 1 hogeuser None 599 8月 7 09:50 id_dsa.pub -rw------- 1 hogeuser None 314 8月 7 09:51 id_ecdsa -rw-r--r-- 1 hogeuser None 171 8月 7 09:51 id_ecdsa.pub -rw------- 1 hogeuser None 464 8月 7 10:02 id_ed25519 -rw-r--r-- 1 hogeuser None 105 8月 7 10:02 id_ed25519.pub
鍵ペアのパーミッション設定(確認)
$ chmod 744 ~/.ssh $ chmod 600 ~/.ssh/id_* $ chmod 644 ~/.ssh/id_*.pub
クライアント側の公開鍵を、サーバー側に登録する
クライアント側の id_ecdsa.pub と id_ed25519.pub を安全な方法でサーバー側へコピーする。(せっかく作ったけど、今回は SSH2 DSA 鍵は使わないことにした)
公開鍵を ~/.ssh/authorized_keys2 に追加する
$ cd ~/tmp # ←ここに公開鍵をコピーしたとする $ cat id_ecdsa.pub id_ed25519.pub >> ~/.ssh/authorized_keys2 $ rm id_ecdsa.pub id_ed25519.pub
鍵ペアのパーミッション設定(確認)
$ chmod 744 ~/.ssh $ chmod 600 ~/.ssh/authorized_keys2
クライアント側から接続してみる
# -2 : SSH2 で # -4 : IPv4 で # -i ~/.ssh/id_ed25519 : 秘密鍵を指定 # hogeuser@192.168.100.100 : ユーザ名とホスト名 hogeuser@SSH_CLIENT ~ $ ssh -2 -4 -i ~/.ssh/id_ed25519 hogeuser@192.168.100.100 The authenticity of host '192.168.100.100 (192.168.100.100)' can't be established. ECDSA key fingerprint is a5:cc:00:0f:32:7e:3d:3a:4f:b4:8c:c5:55:73:75:c5. Are you sure you want to continue connecting (yes/no)? yes #← fingerprint が正しければ yes Warning: Permanently added '192.168.100.100' (ECDSA) to the list of known hosts. Enter passphrase for key '/home/hogeuser/.ssh/id_ed25519': ******** #← パスフレーズを入力 Last login: Thu Aug 7 10:35:18 2014 from ssh_client hogeuser@SSH_SERVER ~ $ #←ログインできた
勝手に使える鍵を選択してくれるから、(ユーザ名と)ホスト名だけ指定してもok
hogeuser@SSH_CLIENT ~ $ ssh hogeuser@192.168.100.100 Enter passphrase for key '/home/hogeuser/.ssh/id_ecdsa': Last login: Thu Aug 7 10:37:26 2014 from ssh_client hogeuser@SSH_SERVER ~ $ #←ログインできた
接続できない場合は、「-v」「-vv」「-vvv」オプション (3段階) を付けて ssh を起動してみる
以下は「~/.ssh/authorized_keys2」が存在しなかった場合の実行例。
$ ssh -v -2 -4 -i ~/.ssh/id_ed25519 hogeuser@192.168.100.100 OpenSSH_6.6.1, OpenSSL 1.0.1h 5 Jun 2014 debug1: Reading configuration data /etc/ssh_config debug1: Connecting to 192.168.100.100 [192.168.100.100] port 22. debug1: Connection established. debug1: identity file /home/hogeuser/.ssh/id_rsa type -1 debug1: identity file /home/hogeuser/.ssh/id_rsa-cert type -1 debug1: identity file /home/hogeuser/.ssh/id_dsa type -1 debug1: identity file /home/hogeuser/.ssh/id_dsa-cert type -1 debug1: identity file /home/hogeuser/.ssh/id_ecdsa type 3 debug1: identity file /home/hogeuser/.ssh/id_ecdsa-cert type -1 debug1: identity file /home/hogeuser/.ssh/id_ed25519 type 4 debug1: identity file /home/hogeuser/.ssh/id_ed25519-cert type -1 debug1: Enabling compatibility mode for protocol 2.0 debug1: Local version string SSH-2.0-OpenSSH_6.6.1 debug1: Remote protocol version 2.0, remote software version OpenSSH_6.6.1 debug1: match: OpenSSH_6.6.1 pat OpenSSH_6.6.1* compat 0x04000000 debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: server->client aes128-ctr hmac-md5-etm@openssh.com none debug1: kex: client->server aes128-ctr hmac-md5-etm@openssh.com none debug1: sending SSH2_MSG_KEX_ECDH_INIT debug1: expecting SSH2_MSG_KEX_ECDH_REPLY debug1: Server host key: ECDSA a5:cc:00:0f:32:7e:3d:3a:4f:b4:8c:c5:55:73:75:c5 debug1: Host '192.168.100.100' is known and matches the ECDSA host key. debug1: Found key in /home/hogeuser/.ssh/known_hosts:1 debug1: ssh_ecdsa_verify: signature correct debug1: SSH2_MSG_NEWKEYS sent debug1: expecting SSH2_MSG_NEWKEYS debug1: SSH2_MSG_NEWKEYS received debug1: Roaming not allowed by server debug1: SSH2_MSG_SERVICE_REQUEST sent debug1: SSH2_MSG_SERVICE_ACCEPT received debug1: Authentications that can continue: publickey debug1: Next authentication method: publickey debug1: Trying private key: /home/hogeuser/.ssh/id_rsa debug1: Trying private key: /home/hogeuser/.ssh/id_dsa debug1: Offering ECDSA public key: /home/hogeuser/.ssh/id_ecdsa debug1: Authentications that can continue: publickey debug1: Offering ED25519 public key: /home/hogeuser/.ssh/id_ed25519 debug1: Authentications that can continue: publickey debug1: No more authentication methods to try. Permission denied (publickey).
sshd をデバッグモードで起動する
管理者権限で起動したcygwinターミナルから sshd をデバッグモードで起動してみようとしたら、以下のようなエラーが出て起動できなかった。
これは、cyg_server アカウント以外のユーザで起動したためだと思う。
$ /usr/sbin/sshd -d debug1: sshd version OpenSSH_6.6.1, OpenSSL 1.0.1e 11 Feb 2013 debug1: key_parse_private2: missing begin marker debug1: read PEM private key done: type RSA debug1: private host key: #0 type 1 RSA debug1: key_parse_private2: missing begin marker debug1: read PEM private key done: type DSA debug1: private host key: #1 type 2 DSA debug1: key_parse_private2: missing begin marker debug1: read PEM private key done: type ECDSA debug1: private host key: #2 type 3 ECDSA debug1: private host key: #3 type 4 ED25519 /var/empty must be owned by root and not group or world-writable. # パーミッションは特に問題ない(と思う) $ ls -ld /var/empty drwxr-xr-x+ 1 cyg_server root 0 8月 4 11:34 /var/empty/
sshd をデバッグモードで起動するには、サービスに登録してしまった方がいいと思う
# デバッグモードのSSHDをサービスに登録する # サーバ側で cygwin ターミナルを管理者権限で起動 # 1度 SSH で接続→切断すると、毎回サービスが停止する # --args の d はデバッグレベル。1~3個まで指定できる # デバッグログは /var/log/sshd_debug に出力される # sshd サービスは自動起動しない(手動) $ cygrunsrv --install sshd_debug_mode \ --disp "CYGWIN sshd DEBUG MODE" \ --path /usr/sbin/sshd \ --args "-Dddd -E /var/log/sshd_debug" \ --type manual \ --user cyg_server -y tcpip Enter password of user `SSH_SERVER\cyg_server': ******** #← cyg_server ユーザのパスワードを入力 Reenter, please: ******** #← cyg_server ユーザのパスワードを再入力 # デバッグモードの sshd を起動する $ cygrunsrv -S sshd_debug_mode
以下のエラーでSSHDサービスの起動に失敗した場合は、cygserverのパスワードを再設定すると良いらしい。
(参考: Cygwin - マルチメディア実験室 - Redmine for School of Education)
$ cygrunsrv -S sshd_debug_mode cygrunsrv: Error starting a service: StartService: Win32 error 1069: OI?クsオスス゚AT[rX・ Jn?ォワケ・オスB (SJIS: ログオンに失敗したため、サービスを開始できませんでした。) ------------------------ C:\>net start sshd_debug_mode システム エラー 1069 が発生しました。 ログオンに失敗したため、サービスを開始できませんでした。
cyg_server ユーザのパスワードを再設定する。
# パスワードは 5 から 8 文字のようだ(もっと長いパスワードを指定してた) $ passwd cyg_server Enter the new password (minimum of 5, maximum of 8 characters). Please use a combination of upper and lower case letters and numbers. New password: ******** Re-enter new password: ******** Password changed. # デバッグモードの sshd サービスを起動 $ cygrunsrv -S sshd_debug_mode
必要がなくなったら、デバッグモードの sshd サービスを削除しておく
$ cygrunsrv -R sshd_debug_mode
0 件のコメント:
コメントを投稿