まず始めに

まず始めにすることはSSHを設定することです。

DebianではOSのセットアップを行う時、インストーラーデフォルトでセットアップを行うと標準でSSHサーバーもセットアップしてくれます。

サーバーのIPを確認し、ローカルネット内のクライアントマシン(例えばWindows)からSSHを使ってログインすることが出来ます。

ただし、この時点ではパスワードが「プレーンテキスト」として流れてしまっているのでセキュリティは皆無といえます。

最初の目的は、暗号化された通信をSSHで行うということになります。


鍵の作成

HogeHoge@Debian:~$ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/home/HogeHoge/.ssh/id_rsa): // Enter
Created directory '/home/HogeHoge/.ssh'.
Enter passphrase (empty for no passphrase):     // ここでパスワード入力
Enter same passphrase again:                    // 今入力したパスワードを入力
Your identification has been saved in /home/HogeHoge/.ssh/id_rsa.
Your public key has been saved in /home/HogeHoge/.ssh/id_rsa.pub.
The key fingerprint is:
9a:9c:ba:a8:0e:f1:dd:f6:75:7b:3c:51:9b:ac:1d:17 HogeHoge@Debian

コマンドを実行すると、どこに鍵を作成するか聞いてきますがそのままEnterを押します。
この場合には、ホームディレクトリに「.ssh」というディレクトリを作成し、そこに鍵を作成します。

次に、鍵のパスワードを入力します。短すぎたり、単調なパスワードを設定しようとすると鍵を作成できない場合があります。
上記のようにパスワード入力後、鍵を保存したとメッセージが出ていればきちんと入力したパスワードで鍵が作成できたことを意味します。

鍵にはRSA鍵とDSA鍵がありますが、RSA鍵の方がより安全です。
よって、なるべくRSA鍵を使いましょう。


鍵について

鍵には公開鍵秘密鍵の二種類存在します。
これらは必ずペアで意味をなします。どちらか一方でも無くしてしまうと、その鍵はもう使えません。新しく作り直してください。
(もちろん、同じパスワードを入力しても絶対に同じ鍵にはなりません。)

公開鍵は上記で作成した場合、「id_rsa.pub」というファイルのものです。
秘密鍵は上記で作成した場合、「id_rsa」というファイルのものです。

次に公開鍵のファイル名をリネームします。
「.ssh」ディレクトリに移動し、mvコマンドで公開鍵のファイル名を「authorized_keys2」にします。
cd /home/HogeHoge/.ssh
mv id_rsa.pub authorized_keys2


秘密鍵については、安全な方法でDebianから取り出しクライアントに移動する必要があります。
もちろん、最も安全な方法は鍵をサーバーで作らないでクライアントで作る事なのですが・・・。

移動手段としては、WindowsからSFTPを用いてDebianにアクセスする方法が簡単かもしれません。
ただし、この段階では通信経路には暗号化されていないデータが流れるので、ローカルネットワークでのみこの方法は有効です。
(といっても、ローカルネット内に悪意を持つユーザーがいる場合はその限りではありませんが。例えば、最初から部屋に
LANが備え付けられているマンションでは、多くの場合、V-LANを使っています。V-LANはマンションの全ての部屋は同じサブネットなので、
他人の部屋の通信データを傍受できる場合もある)

Windows用SFTPツールとしては、FileZila辺りを使います。

秘密鍵の移動後、サーバーから秘密鍵を削除する事が望ましいです。


SSHでサーバーにアクセス

Windowsに秘密鍵を移動できたら、あとはPuttyなどのSSHコンソールを使ってサーバーにアクセスするだけです。





SSHサーバーの設定を変える

この時点で、SSHで鍵を使う通信ができるようになりました。
しかし、未だに鍵を使わずにSSH通信ができる環境が設定されています。
これではいろいろとセキュリティ面で不安が多いので、今後はすべてSSHの暗号化通信を使いプレーンテキストでログインできないように設定するべきです。

ここでは、SSHサーバーの設定を変更し、プレーンテキストでのログインを出来ないように設定します。

サーバーの設定は「/etc/ssh/sshd_config」にあります。これをviを使って編集します。
# Package generated configuration file
# See the sshd(8) manpage for details

# What ports, IPs and protocols we listen for
Port 22
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes

# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
ServerKeyBits 768

# Logging
SyslogFacility AUTH
LogLevel INFO

# Authentication:
LoginGraceTime 600
PermitRootLogin yes
StrictModes yes

RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile     %h/.ssh/authorized_keys

# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes

# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no

# Change to no to disable s/key passwords
ChallengeResponseAuthentication no

# Change to yes to enable tunnelled clear text passwords
PasswordAuthentication no


# To change Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#AFSTokenPassing no
#KerberosTicketCleanup no

# Kerberos TGT Passing does only work with the AFS kaserver
#KerberosTgtPassing yes

X11Forwarding no
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
KeepAlive yes
#UseLogin no

#MaxStartups 10:30:60
#Banner /etc/issue.net

Subsystem       sftp    /usr/lib/sftp-server

UsePAM no

変更した箇所はほんの少しで、
「ChallengeResponseAuthentication」をnoに設定し、「UsePAM」もnoに設定しました。

コレにより、ホームディレクトリに「.ssh」ディレクトリがないユーザーや公開鍵が存在しないユーザーのログインが一切できなくなります。
よって、もし今使っている秘密鍵をなくしてしまった場合にはLinuxのコンソールを直接操作して、新しい鍵を作成しなければなりません。

最後に、設定ファイルの変更をサーバーに反映させるために、SSHDを再起動します。
/etc/init.d/ssh restart
エラーが出力されなければ、SSHサーバーは設定ファイルを正常に読み込んだということです。

エラーが表示されたり、クライアントからサーバーにアクセスできない場合、正常に動作していない可能性があります。
設定ファイルにミスがないかを確認してください。
最終更新:2006年06月27日 11:00