>>OpenSSH

Solaris10 OpenSSH (SPARC/X86)

  OpenSSHはセキュリティ化したシェルおよびターミナル環境を提供するツール。通信経路は暗号化され、従来のtelnetやrshより安全な使用環境が構築出来る。

 Solaris10ではOpenSSHが標準搭載されている。設定ファイルを編集すればそのまま使える状態になっている。OpenSSHはSMF管理下で起動し、OpenSSH用ユーザ/グループの作成は必要ない(作成することも出来る)。

 しかしここでは daemon状態での起動からSMF下のinetd(スーパーデーモン/TCP Warpper)で起動する様に変更して設定する。




sshdサーバ設定 (SPARC/X86)

OpenSSHの設定ファイルは /etc/ssh/ディレクトリに配置されている。サーバ設定ファイルは sshd_config となっている。このファイルのデフォルトは、通常パスワード可/ポートフォワード禁止になっている。

これを専用パスワードのみ/ポートフォワード可に変更する。

設定のポイント/RSA承認のみで設定するパラメータ変更

default
変 更値

ListenAddress {IPアドレス} ::
0.0.0.0
接 続先の 制限。複数の設定が可能。0.0.0.0 と記述するとIPv4で制限なし、:: と記述するとIPv6&v4で制限なしで待機する。
AllowUsers {ユーザ名} --
{user}
使 用でき るユーザを制限する。制限しない場合は無記述。
AllowTcpForwarding {yes/no} no yes
ポー ト フォワードの設定。ポートフォワードを許可する場合は yes。
PasswordAuthentication {yes/no} yes no UNIX パスワードでのログインの許可(yes)/禁止(no)。
PermitRootLogin  {yes/no}
no
no
root でのログインの許可(yes)/禁止(no)。
PAMAuthenticationViaKBDInt {yes/no}
yes
no
PAM の チャレンジ・レスポンス認証を許可するかどうか指定。
PasswordAuthentication (パスワード認証) が禁止されているかどうかにかかわらず、パスワード認証も許可される。
RSAAuthentication  {yes/no}
yes
yes
純 粋な RSA 認証を許可するかどうかを指定。
ChallengeResponseAuthentication  {yes/no} --
--
チャ レン ジ・レスポンス認証を許可するかどうか指定。
GSSAPIAuthentication  {yes/no} --
--
GSSAPI ベースのユーザ認証を使用するかどうかを指定。
これはデフォルトでは no になっています。
注意: この設定項目はプロトコル バージョン 2 のみに適用。
KbdInteractiveAuthentication {yes/no} --
--
旧 オプ ション。(yesだと攻撃対象になる可能性がある)
(注)
  {yes/no}赤字は推奨設定値(RAS認証のみの場合の値)。
  defaultはインストール直後の値。
 -- は値が設定されていない(デフォルト値)。

以下は設定ファイルの参考例
設 定ファイル:
/etc/ssh/sshd_config
設 定: X11ポートフォワードyes, RAS 認証のみ, ポートフォワー ドyes, ログ出力AUTH/INFO
# Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
# Configuration file for sshd(1m)
# Only v2 (recommended)
Protocol 2

# Listen port (the IANA registered port number for ssh is 22)
Port 22

# IPv4 only   : ListenAddress 0.0.0.0
# IPv4 & IPv6 : ListenAddress ::
ListenAddress ::

# Port forwarding
#AllowTcpForwarding no
AllowTcpForwarding no

# If port forwarding is enabled, specify if the server can bind to INADDR_ANY.
GatewayPorts no

# X11 tunneling options
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes

# The maximum number of concurrent unauthenticated connections to sshd.
#MaxStartups 10:30:60

# Banner to be printed before authentication starts.
#Banner /etc/issue

# Should sshd print the /etc/motd file and check for mail.
PrintMotd no

# KeepAlive specifies whether keep alive messages are sent to the client.
KeepAlive yes

# Syslog facility and level
SyslogFacility auth
LogLevel info

# == Authentication configuration ==

# Host private key files
# Must be on a local disk and readable only by the root user (root:sys 600).
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key

# Default Encryption algorithms and Message Authentication codes
#Ciphers        aes128-ctr,aes128-cbc,arcfour,3des-cbc,blowfish-cbc
#MACS   hmac-md5,hmac-sha1,hmac-sha1-96,hmac-md5-96

# Length of the server key
# Default 768, Minimum 512
ServerKeyBits 768

# sshd regenerates the key every KeyRegenerationInterval seconds.
KeyRegenerationInterval 3600

# Ensure secure permissions on users .ssh directory.
StrictModes yes

# Length of time in seconds before a client that hasn't completed authentication is disconnected.
LoginGraceTime 600

# Maximum number of retries for authentication
# Default is 6. Default (if unset) for MaxAuthTriesLog is MaxAuthTries / 2
MaxAuthTries    6
MaxAuthTriesLog 3

# Are logins to accounts with empty passwords allowed.
PermitEmptyPasswords no

# To disable tunneled clear text passwords, change PasswordAuthentication to no.
# PasswordAuthentication yes
PasswordAuthentication no

# Use PAM via keyboard interactive method for authentication.
#PAMAuthenticationViaKBDInt yes
PAMAuthenticationViaKBDInt no

# Are root logins permitted using sshd.
PermitRootLogin no

# sftp subsystem
Subsystem       sftp    /usr/lib/ssh/sftp-server

# == SSH protocol v1 specific options ==

# Should sshd use .rhosts and .shosts for password less authentication.
IgnoreRhosts yes
RhostsAuthentication no

# Rhosts RSA Authentication
RhostsRSAAuthentication no

# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication.
#IgnoreUserKnownHosts yes

# Is pure RSA authentication allowed.
# Default is yes
RSAAuthentication yes


inetdでの起動設定 (SPARC/X86)

 Solaris10ではOpenSSHはSMF管理下でdaemon状態で起動される。
 しかしここでは SMF下のinetd(スーパーデーモン/TCP Warpper)で起動する様に変更して設定する。inetd下でsshdを実行する様にすれば負荷を減らせるうえに特定のマシンのみに接続を制限出来る。

 設定手順
    (1)インポートファイルの作成
    (2)hosts.allowに接続許可IPを設定
    (3)インポートファイルよりSMF/inetd管理下に登録

(1) インポートファイルの作成
 inetd形式のインポート用ファイルを作成する。形式は /etc/serviceファイルと同で、1行にタブ切り形式でサービスの起動情報を記入する(下記例参考)。このファイルは登録時のみ必要なファイルの為、登録後は削除して構わない。

インポート用ファイルの作成

インポートファイルは一時的に作成するファイルなのでファイル名は適当で良い。登録後は削除しても構わない。
(下記例では個人的嗜好でインポートファイルは /etc/inet/.smf.importsに残している)
# cd /etc/inet/.smf.imports
# vi inetd.conf.sshd
下記をコピーペースト(文字間タブで記述)

ssh   stream   tcp   nowait   root   /usr/lib/ssh/sshd   /usr/lib/ssh/sshd -i


(2)hosts.allowに接続許可IPを設定
 inetd(スーパーデーモン/TCP Warpper)で起動する為、/etc/hosts.allowに sshdを許可するマシンのIPアドレスを記述する。

/etc/hosts.allowファイルに sshd接続を許可するIPアドレスを記述。
(参考:hosts.allow/deny 設定)
# cd /etc
# vi hosts.allow
...
sshd: {許可IPアドレス}
...

(3)インポートファイルよりSMF/inetd管理下に登録
 inetconvコマンドを使いインポートファイルより登録する。

デフォルトのsshdを停止およびdisableにする。
FMRI: svc:/network/ssh/tcp:default
# svcadm disable network/ssh
# svcs -a | grep ssh
disabled       18:13:34 svc:/network/ssh/tcp:default


SMF/inetdにインポートファイルより登録
# inetconv -i /etc/inet/.smf.imports/inetd.conf.sshd

登録確認
# inetadm | grep ssh
enabled online svc:/network/ssh/tcp:default

# svcs -a | grep ssh
disabled       18:13:34 svc:/network/ssh/tcp:default
online         18:13:35 svc:/network/ssh:default





IP Filter通過設定 (SPARC/X86)

 Solaris10 の IP Filterでパーソナルファイヤーウォールを使用している場合、以下の様に通過設定をする必要がある。
 IP Filterの詳細は  IP Filterのページを参照。

OpenSSHサーバおよびクライアントを通過される設定


  pass in quick on {I/F} proto tcp from {IP-addr} to any port = 22 keep state
 
  pass out quick on {I/F} proto tcp from any to {IP-addr} port = 22 keep state
【注意】
(1) {I/F}はインターフェース名。ifconfig -a コマンドで調べることが出来る。(AcerPower1000の場合は nge0)
(2) {IP-addr} はサーバまたはクライアントマシンのIPアドレスを指定する。

【備考】
 OpenSSHにはssh用のポート(標準22番)を経由して任意のポート同士を接続することが可能なポートフォワード機能が備わっている。ファイヤーウォールをバイパスさせたい場合などにも利用できる。

 X11(X Windows)の使用ポートなどはオプションおよび設定ファイルでポートフォワードが指定出来る様になっている。X11(X Windows)のポートを IP FilterでOpenにする必要はない。

 sshサーバ設定ファイル sshd_configで以下の設定にしておけばポートフォワード機能が使える。
...
AllowTcpForwarding yes
...
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
...


sshdのサーバ設定は以上で終了。あとは各ユーザレベルでの設定。





ユーザ秘密・公開キーの作成 (SPARC/X86)

 OpenSSHで使用する暗号キーファイルを作成する。このキーファイル作成作業はOpenSSHを使用するクライアント側で行う。暗号キーファイルは秘密キー/公開キーのペアファイルで作成され、公開キーのみをOpenSSHサーバマシンに登録する。

 暗号キーファイルは接続先がOpenSSHサーバであればSolaris/Linux/Mac/Windowsを問わず共通して使用出来る。クライアン トマシンのユーザ毎に暗号キーを1つ作成し、公開キーのみをFDD/CD/DVD/USBメモリ等のメディアに保存しておけば必要に応じて接続したい OpenSSHサーバマシンに公開キーをメディアから登録すればOpenSSHが使用できる様になる。
 

【作成する暗号キーファイル一覧】

 Solaris10/OpenSSHサーバではデフォルトでSSH2キー(プロトコルv2用キー)を使用する様になっている。暗号化アルゴリズムは rsaおよびdsaに対応している。Solaris10/OpenSSHサーバでは使用しないが SSH1(プロトコルv1)用のrsa1アルゴリズムキーもついでに作成しておくことにする。

アルゴリズム
SSH Ver
ファイル
rsa1 鍵ペア SSH1
 $HOME/.ssh/identity (秘密キー)
 $HOME/.ssh/identity.pub (公開キー)
rsa 鍵ペア SSH2  $HOME/.ssh/id_rsa (秘密キー)
 $HOME/.ssh/id_rsa.pub (公開キー)
dsa 鍵ペア SSH2  $HOME/.ssh/id_dsa (秘密キー)
 $HOME/.ssh/id_dsa.pub (公開キー)


【暗号キー作成方法】
 ssh_keygenコマンドを使用して暗号キーファイルを作成する。作成はユーザでホームディレクトリ下で実 行する。実行するとホームディレクトリ下に $HOME/.ssh というディレクトリが生成され、そのディレクトリ内に暗号キーのペアファイルが生成されている。

rsa1/rsa/dsaの3セットの暗号キーを作成する。

コマンド形式:  /usr/bin/ssh-keygen -t {アルゴリズム}

実行するとパスワードを問われるので任意のパスワードを2回入力。
(*)このときパスワードはログインパスワードとは別のものを設定する。
$ cd $HOME

$ ssh-keygen -t rsa1
Generating public/private rsa1 key pair.
Enter file in which to save the key ($HOME/.ssh/identity):
Created directory '$HOME/.ssh'.
Enter passphrase (empty for no passphrase): {SSH用パスワード}
Enter same passphrase again: {SSH用パスワード(確認)}

Your identification has been saved in $HOME/.ssh/identity.
Your public key has been saved in $HOME/.ssh/identity.pub.
The key fingerprint is:
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX XXX@SunWn1

$ ssh-keygen -t rsa
Generating public/private rsa key pair.

Enter file in which to save the key ($HOME/.ssh/id_rsa):
...同上のメッセージが表示(省略) ...

$ ssh-keygen -t dsa
Generating public/private dsa key pair.

Enter file in which to save the key ($HOME/.ssh/id_dsa):
...同上のメッセージが表示(省略) ...

パーミションの確認。OpenSSHでは暗号キーファイルと$HOME/.sshディレクトリのパーミションがローカルに制限されていなければ接続を拒否されるので確認を行う。

     .sshディレクトリは パーミション値 700 (rwx -- --)
     各秘密キーは パーミション値 600 (rw- --- ---)

作成した公開キーは FDD/CD/DVD/USBメモリ等のメディアにコピーし、秘密キーのみ残して.sshディレクトリから公開キーは削除しておいた方が良い。

公開キー 
  $HOME/.ssh/identity.pub
  $HOME/.ssh/id_rsa.pub
  $HOME/.ssh/id_dsa.pub

    


公開キーの登録 (SPARC/X86)

 上記で作成した公開キーを OpenSSHサーバマシンに持って行き、各ユーザ毎に登録する
 サーバ側のユーザにログインして以下の作業を行う。

$HOME/.ssh/authorized_keys ファイルに公開キーの内容を追加記述する。
(authorized_keysが無い場合は新規作成、ある場合は末尾に追加)
$ cd $HOME/.ssh

$ cat identity.pub >> $HOME/.ssh/authorized_keys

$ cat id_rsa.pub >> $HOME/.ssh/authorized_keys
$ cat id_dsa.pub >> $HOME/.ssh/authorized_keys

$ chmod 644 authorized_keys


【注意】
サーバー側には.sshディレクトリが無い場合もあるので作成する。パーミションがローカルに制限されていなければ接続を拒否されるので確認を行う。

     .sshディレクトリは パーミション値 700 (rwx -- --)
     各秘密キーは パーミション値 600 (rw- --- ---)





sshクライアント設定 (SPARC/X86)

  sshのクライアント設定は特に必要ない。sshコマンドのオプションで対応できる。

 設定する場合は以下のファイルを生成して設定する。

/etc/ssh/ssh_config クライアントマシン全体の設定
$HOME/.ssh/config ユーザ毎の設定

設定例
$HOME/.ssh/config
# Copyright (c) 2001 by Sun Microsystems, Inc.
# All rights reserved.
...(省略)...
# Example (matches compiled in defaults):
#
# Host *
#   ForwardAgent no
#   ForwardX11 no
    ForwardX11 yes
#   PubkeyAuthentication yes
#   PasswordAuthentication yes
#   FallBackToRsh no
#   UseRsh no
#   BatchMode no
#   CheckHostIP yes
#   StrictHostKeyChecking ask
#   EscapeChar ~
    IdentityFile ~/.ssh/identity
    IdentityFile ~/.ssh/id_rsa
    IdentityFile ~/.ssh/id_dsa






接続および使い方 (SPARC/X86)

 クライアントからOpenSSHサーバへの接続方法(使い方)。

コマンド形式:
/usr/bin/ssh [-1|-2] [-X] [-l ユーザ名] {SSHサーバ名 or IPアドレス} [コマンド]

-1: SSH Ver1プロトコルで接続
-2: SSH Ver2プロトコルで接続
-X: X11ポートフォワードを有効
-l: ログインユーザ指定
 
 実行にはパスワードを求められるので入力する。
 (注意) 初回接続時は接続先情報を保存するかを問い合わせがあるがyesを入力する。以降は表示されない。


【telnetの代わりとして使用する場合】
 リモートターミナルとして使用する場合の例。
Solaris10ではSSH Ver2を使用。
Xウインドウのフォワードを有効にする。
$ /usr/bin/ssh -2 -X -l {user名} {SSHサーバ名}

【rshの代わりとして使用】
  リモートシェルとしてコマンドを実行する例。
Solaris10ではSSH Ver2を使用。
Xウインドウのフォワードを有効にする。
$ /usr/bin/ssh -2 -X -l {user名} {SSHサーバ名} [コマンド]





パスフレーズの省略 (SPARC/X86)

 sshコマンドを実行するたびにパスワードを入力するのは面倒。これを初回1回のみにして2回目以降は省略することが出来る。

【ssh_agent/ssd_addコマンド】

ssh_agentコマンド

ssh-agentコマンドをログイン時に起動すれば ssh-agentの環境変数と /tmpにパスフレーズを格納するファイルが作成される。ssh_addコマンドでパスワードが入力された後はこのエージェントがパスワード入力を省略してくれる。

ssh_addコマンド
 
ssh-addコマンドは上記ssh_agentで作成された環境変数とファイルにパスフレーズを保持する。
以降はSSHでパスフレーズの入力は省略できる様になる。

ssh-addコマンドでSSHのパスフレーズ済みかどうかを確認するには "-l" オプションで表示される。

【ssh_agentの起動】
  GNOME環境あるいはCDE環境の場合、ログイン時に$HOME/.dtprofileが実行される。
  $HOME/.dtprofile (SXCEなどの場合は $HOME/.login)にssh-agentを実行する様に以下を追加する。
 
ファイル $HOME/.dtprofile
ファイル末に以下を追加。
...(省略)...

# SSH_AGENT start
#
PSS=`/usr/bin/ps -ef |/usr/bin/grep /usr/bin/ssh-agent |/usr/bin/grep {user名} |/usr/bin/grep -v grep`
if [ ! -z "$PSS" ]; then
    PID=`/usr/bin/echo $PSS |/usr/bin/awk '{ print $2 }'`
    if [ ! -z "$PID" ]; then
        echo "kill pid=$PID"
        /usr/bin/kill $PID
    fi
fi
unset SSH_AUTH_PID
unset SSH_AGENT_SOCK
eval `/usr/bin/ssh-agent`

 
 ログイン後、パスワードを設定するには ssh-add コマンドを実行すればパスワード入力を初回のみに出来る。

ssh-agentにパスフレーズを設定
# /usr/bin/ssh-add $HOME/.ssh/id_rsa
>> パスフレーズ入力

パスフレーズを設定済みかをチェックする場合
# /usr/bin/ssh-add -l 


【パスワードの確認・入力の自動化】
 sshコマンドによる接続をスクリプトファイル化して、その中でパスワードが設定済みかを調べ、設定がなければ ssh_addコマンドでパスワードを設定後 sshコマンドを実行するスクリプトファイルを作成する。

 
スクリプトファイル: run_ssh.sh

(1) ssh-agentに対するパスフレーズが未入力の場合、パスフレーズ入力画面になる。
(2) -win をオプションで指定するとポップアップウインドウでパスフレーズ入力画面が表示される(アイコン起動用)。
(3) 引数にプログラムを指定すると sshが起動される。引数がない場合はパスワードのみの設定。
#!/bin/bash
# SSHを使ったプログラム起動

# usage: run_ssh.sh [-win|-force] {プログラム}

ID_FILE="$HOME/.ssh/id_rsa"
TERM_PROG="/usr/dt/bin/dtterm -geometry 77x20+400+200 -title 'OpenSSHパスワード入力'"


CHECK_AGENT=`/usr/bin/ssh-add -l |/usr/bin/grep $ID_FILE`
if [ -z "$CHECK_AGENT" ]; then
    if [ "$1" = "-win" ]; then
        $TERM_PROG -e /usr/bin/ssh-add $ID_FILE
    shift
    else
        /usr/bin/ssh-add $ID_FILE

    fi
elif [ "$1" = "-force" ]; then
    $TERM_PROG -e /usr/bin/ssh-add $ID_FILE
   
shift
fi

# プログラム指定がある場合は起動する
if [ ! -z  "$1" ]; then
     /usr/bin/ssh -2 -X -l $USER $* &
fi
exit 0

このスクリプトを使用して
   run_ssh.sh -win {プログラム}
で指定すればアイコン登録出来る。


inserted by FC2 system