まず始めに
まず始めにすることは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