2022年8月、ホームページを全面リニューアルしました! 情報を分かりやすくお伝えできるサイト作りを目指してまいります。

OpenSSHでリモート接続(SSH1)!

openSSHでリモート接続をする場合、Plainパスワードでリモートでは何のためのSSHかわからない。
したがって、SSLを使った暗号化パスワードを使ってリモート接続するが、ssh-keygenコマンドを使ってkeyを作るが「Unixには全然自信がない。」という人に最適なPortForwarderと言うWindowsアプリで簡単にRSA keyが作れる方法を伝授する。


1. OpenSSHのインスコ
環境は、Debian Sarge Kernel2.4.30でLinuxBridgeを構築の作業中にOpenSSHでリモート接続をした。
apt-get でSSHをインストールする。ちなみに、俺の環境では OpenSSH_3.8.1 を使用した。


2.鍵を作る

1)クライアント側の鍵を作る

■ PortForwarderをインスコする。
ここ のoldersから PortForwarder-1-1-1_WIN.zip をゲットして、Zipファイルを解凍して適当なフォルダにインストールする。ここで使う pf-keygen.exe は、PortForwarder-1-1-1_WIN.zip以前のバージョンに同梱されているので、そこいら辺のバージョンをゲットすること。

■ 鍵を作る。
pf-keygen.exe を実行する。

図1

上図のように Generate new key を選択後、Identity file の欄に作成する identity (RSA key file) を置くフォルダを入力してかOK選ぶ。例えば、D:\ssh-key\identity とか入れる(このとき、必ずidentityのファイル名まで入れること)。次にパスフレーズを入れる。

図2

Passphrase の欄に RSA key の passphrase (RSA key を使用する時に求められるパスワード) を入力してOKを選ぶ。確認ためもう一度入力を求められるので、同じ passphrase をもう一度入力する。次に comment の入力を求めらたら無視して何も入力せずにOKを選ぶ。これでidentity(自分のPCに置く鍵) とidentity.pub (SSH鯖に置く鍵) が作成された。

2)SSH鯖の鍵を作る

■ 鍵置き場を作る。
SSH鯖のhome directory に .ssh というディレクトリを作成する。

# mkdir /home/hogehoge/.ssh

■ 鯖鍵を作る。
1)で作成した identity.pub を authorized_keys とリネームしフロッピーディスクにコピーする。
authorized_keysを/home/hogehoge/.sshにコピーする。

# cd /home/hogehoge/.ssh/
# cp /floppy/authorized_keys .

.sshディレクトリ内のすべてのファイル及びディレクトリの例えば所有者をhogehogeにする。

# chown -R hogehoge /home/hogehoge/.ssh/

この .ssh というディレクトリと authorized_keys はセキュリティのため、バーミッションを 700 にする。

$ chmod 700 -R /home/takuya/.ssh/

$ ls -al

省略
-rwx—— 1 hogehoge root 319 Oct 21 21:50 authorized_keys
省略


3.TTSSHでコネクトする
teratermのttssh.exeでコネクトする。
ttssh.exeを起動して、以下のような要領でRSA鍵を使ってSSH鯖へログインする。

図3

4.keygenを使ってkey認証するときのSSHの設定ファイル
Debian Sarge 3.1用のバイナリOpenSSHのコンフィグ。

ml2:/etc/ssh# more /etc/ssh/sshd_config

# ポート22で通信
Port 22

# SSHバージョン1と2を両方使用
Protocol 2,1

# sshd が、受けつけるネットワークトラフィックを処理するために root権限を分離するかどうかを指定する。
UsePrivilegeSeparation yes

# バージョン 1 では、サーバ鍵は (一度でも使われると) ここで指定された間隔ごとに自動的に再生成される。
# このように鍵を再生成する目的は、あとでそのマシンに侵入して盗聴したセッションを解読されたり、鍵を盗
# まれたりするのを防ぐためのものである。この鍵はどこにも格納されません。値としてゼロを指定すると、鍵
# はまったく再生成されなくなる。デフォルトでは 3600 (秒) になっている。
KeyRegenerationInterval 3600

# バージョン 1 で短期的に使われるサーバ鍵のビット数を指定します。最小値は 512 で、デフォルトは 768 です。
ServerKeyBits 768

# sshd が出力するログメッセージで使われるログの分類コード (facility) を指定する、対象値は次のとおり。
# DAEMON, USER, AUTH, LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6,LOCAL7。
# デフォルトは AUTH。
SyslogFacility AUTH

# sshd が出力するログメッセージの冗長性レベルを指定します。とりうる値は次のとおりである。
# QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2 および DEBUG3。
# デフォルトでは INFO。DEBUG と DEBUG1 は等価。 DEBUG2、DEBUG3 はそれぞれさらに冗長なログになる。
# DEBUG レベル以上のログはユーザのプライバシーを侵害するので、勧められない。
LogLevel INFO

# ユーザがここで指定された時間内にログインできないと、サーバは接続を切断する。この値をゼロにすると、
# 時間制限はなくなる。デフォルトの値は 120 (秒)
LoginGraceTime 120

# root がログインできるかどうか指定する。この引数の値は 「yes」 、 「without-password」 (パスワード認証なし)
# 「forced-commands-only」 (強制コマンドのみ)、あるいは 「no」 のいずれかを指定する。
# デフォルトは 「yes」 。
# このオプションを 「without-password」 にすると、root はパスワード認証ではログインできなくなる。
# このオプションを 「forced-commands-only」 にすると、root は公開鍵認証を使ってログインできるが、
# その鍵に command オプションが指定されている場合にかぎる(これは通常の root ログインを許可していなくても、
# リモートバックアップをとりたいときなどに有用である)。root に対してはこれ以外の認証方法はすべて禁止になる。
# このオプションを 「no」 にすると、root のログインは許可されない。
PermitRootLogin no

# sshd がログインを許可する前に、ユーザのファイルおよびホームディレクトリの所有権とパーミッションを
# チェックすべきかどうかを指定する。これはふつう初心者が、しばしば自分のディレクトリを誰でも書き込め
# るようにしてしまう事故を防ぐために有効です。デフォルトでは「yes」 になっている。
StrictModes yes

# 純粋な RSA 認証を許可するかどうかを指定する。デフォルト”yes” になっている。このオプションは
# バージョン 1にのみ適用される。
RSAAuthentication yes

# 公開鍵認証を許可するかどうか指定する。デフォルトは 「yes」。このオプションは プロトコル バージョン 2
# にのみ適用されることに注意。
PubkeyAuthentication yes

# ユーザ認証のさいに使われる公開鍵を格納しているファイル名を指定する。 AuthorizedKeysFile のファイル名中に %T
# が含まれている場合、その部分は接続の間別のものに置換されます。%% は「%」1文字に置換される。
# %h は認証しようとしているユーザのホームディレクトリに置換され、 %u はそのユーザのユーザ名に置換される。
# この後、その絶対パスあるいはユーザのホームディレクトリからの相対パスがAuthorizedKeysFile に渡される。
# デフォルトでの値は 「.ssh/authorized_keys」 となっている。
AuthorizedKeysFile %h/.ssh/authorized_keys

# RhostsRSAAuthentication または HostbasedAuthentication の各認証で、 .rhosts および .shosts ファイルを
# 使わないようにします。この状態でも、 /etc/hosts.equiv および /etc/shosts.equiv は依然として有効です。
# デフォルトでは 「yes」 になっている。
IgnoreRhosts yes

# RSA ホスト間認証が成功しているとき、rhosts や /etc/hosts.equiv を使った認証をおこなってよいかどうか指定。
# デフォルトは 「no」です。このオプションはバージョン 1 にのみ適用されることに注意。
RhostsRSAAuthentication no

# 公開鍵ホスト認証が成功したときに、 rhosts あるいは /etc/hosts.equiv 認証を許可するかどうか指定する
# (ホストベース認証)。このオプションは RhostsRSAAuthentication (RhostsRSA 認証の許可) に似ており、バージョン 2
# のみに作用する。デフォルトの値は 「no」 。
HostbasedAuthentication no

# RhostsRSAAuthentication または HostbasedAuthentication の各認証で、ユーザの ~/.ssh/known_hosts
# ファイルを使わないようにする。デフォルトは 「no」
IgnoreUserKnownHosts yes

# パスワード認証が許可されているとき、パスワード文字列が空のアカウントに対してサーバがログインを許可するかどう
# か指定する。デフォルトは 「no」 。
PermitEmptyPasswords no

# チャレンジ・レスポンス認証を許可するかどうか指定する。login.conf(5) に記されているすべての認証形式が使える。
# デフォルトは 「yes」 です。
ChallengeResponseAuthentication yes

# パスワード認証を許可するかどうか指定する。デフォルトでは「yes」 。
PasswordAuthentication no

# X11 転送を許可するかどうかを指定する。この引数の値は 「yes」 あるいは 「no」 で、デフォルトは 「no」。
X11Forwarding no

# sshd が X11 転送をするときに最初に使われるディスプレイ番号を指定する。これは sshd が X11 転送で使うディスプ
# レイ番号が、本物の Xサーバのディスプレイ番号と衝突してしまうのを防ぐためである。デフォルトの値は 10 。
X11DisplayOffset 10

# ユーザが対話的にログインしたとき、 /etc/motd (今日のお知らせ) ファイルの内容を表示するかどうか指定する。
# (システムによっては、これはシェルや /etc/profile に相当するものが表示する)。デフォルトは 「yes」。
PrintMotd no

# ユーザが対話的にログインしたとき、そのユーザが前回ログインした日付と時刻を表示するかどうか指定する。
# デフォルトでは 「yes」 。
PrintLastLog yes

# 対話的ログインセッションの際、 login(1) プログラムを使うかどうかを指定する。デフォルトでは 「no」 。
# 対話的でないリモートコマンド実行のときに login(1) が使われることはない。また、これが許可されていると
# X11Forwarding は許可されなくなるという点に注意。なぜなら、login(1) は xauth(1) クッキーの扱いを知らないからである。
UseLogin no

# TCP接続を生かしておくシステムが相手のマシンに keepalive メッセージを送るかどうか指定する。これが送られると、
# 接続の異常終了や相手マシンのクラッシュが正しく通知されるようになる。しかしこれを使うと、たとえ経路が一時的に
# ダウンしていても接続が死んでいるということになってしまい、これが邪魔になる場合もある。その一方で、もし TCP
# keepalive が送られないとすると、セッションはサーバ上で永久に残ってしまことがあり、 「幽霊」 ユーザを居座らせ
# てサーバ資源を消費することがある。デフォルトは “yes” (keepalive メッセージを送る) になっている。
# そのためクライアントはネットワークがダウンするか、リモートホストがクラッシュすると通知する。
# これは永久に残るセッションを防ぐ。Keepalive を禁止するには、この値を 「no」にする
KeepAlive yes

# 外部サブシステム (ファイル転送デーモンなど) を設定する。このオプションへの引数にはサブシステム名と、
# そのサブシステムに要求があったとき実行されるコマンドを与える。 sftp-server(8) はファイル転送サブシステム
# 「sftp」 を実装したものである。デフォルトではサブシステムは何も定義されていない。このオプションはプロトコル
# バージョン 2 にのみ適用されることに注意。
Subsystem sftp /usr/lib/sftp-server

# Pluggable Authentication Module (PAM) インターフェイスによる認証を許可する。
# これが 「yes」 に設定されている場合、すべての認証形式に対して ChallengeResponseAuthentication を使用した
# PAM 認証と、PAM アカウントおよびセッションモジュールの処理が許可される。ふつう PAM のチャレンジ・レスポンス認証
# はパスワード認証と等価な役割を提供しているので、 PasswordAuthentication あるいは
# ChallengeResponseAuthenticationのどちらかを許可する必要がある。
# これを許可した場合、 sshd を root 以外の一般ユーザで走らせることはできない。
# デフォルトは 「no」。 UsePrivilegeSeparation が指定されている場合は、認証のあとで禁止される。
UsePAM yes


5.SSHで暗号化パスワードを使わないでプレインなパスワードで通信する
では、これまではSSLを使った暗号化パスワードを使って通信する方法を説明してきたが、ここではセキュリティにきわめて弱いがplain textでloginする方法を説明する。この通信で便利なのは、Linuxをインストールしたては何も有効になっていない。したがって、せめてリモートでログインしてインストール後の環境設定をしたいときなど、お手軽モードとして利用するのに好ましい。さらに、全て環境設定が終わった後、本来のkeygen通信に設定を変えれば良いだろう。

vline2:/etc/ssh# more sshd_config

Port 22

Protocol 2,1

HostKey /etc/ssh/ssh_host_key

HostKey /etc/ssh/ssh_host_rsa_key

HostKey /etc/ssh/ssh_host_dsa_key

UsePrivilegeSeparation yes

KeyRegenerationInterval 3600

ServerKeyBits 768

SyslogFacility AUTH

LogLevel INFO

LoginGraceTime 600

PermitRootLogin no                ←ここはnoにしておこう。rootでいきなりlogin出来ないように、せめてこのくらいのセキュリティはすべし。

StrictModes yes

RSAAuthentication yes

PubkeyAuthentication yes

IgnoreRhosts yes

RhostsRSAAuthentication no

HostbasedAuthentication no

PermitEmptyPasswords no

PasswordAuthentication yes          ←ここをnoからyesに変更する

省略

これで、sshdをリスタートすれば完了。TTSSHでplain login出来るはずである。

以上

コメント