help.ubuntu.com/community/SSH/OpenSSH/Configuring の手順では、パスワード認証を無効にして、「特別に承認したコンピューターからのみ接続できるようにする」ことを推奨しています。しかし、彼らはコンピュータを明確に承認する方法を言っていません。それ、どうやったら出来るの?
サーバーにアクセスする各ユーザーで、ターミナルで実行します。
ssh-keygen
ssh-copy-id <username>@<serverIPorDNSname>
保存先を尋ねられますが、デフォルトで十分です。パスフレーズの入力を求められます。これは、コンピューターが盗難または侵害された場合に備えてキーを暗号化することです。パスフレーズが必要ない場合は、両方のパスフレーズプロンプトを空白のままにします。
最初のコマンドは、それが実行されている現在のユーザーのsshキーを作成します。 2番目のコマンドはサーバーにsshを実行し、現在のユーザーのキーをサーバーのログイン許可リストに追加します。 ssh-copy-idはsshを使用しているため、パスワードログインを無効にする前にこれを行う必要があります。
SSHキーは2つの一致する半分です。半分は全員に伝えられ、もう半分は秘密にされます。数学的アルゴリズムを使用して、公開鍵の半分を使用して、秘密鍵で暗号化されたデータを復号化できます。データが公開鍵で正常に復号化された場合、それが暗号化された鍵の秘密の半分であったことは疑いの余地がありません。そのため、sshキーでログインすると、クライアントは基本的に「私を入れてください」というメッセージ(秘密キーを使用して暗号化された)を送信します。サーバーは公開鍵を使用してチェックし、公開鍵が許可されたコンピューターのリストに含まれている場合、ログインは成功します。
ssh-copy-idは、(sshを使用して)ログインを許可するキーのサーバーリストにパブリックハーフをコピーします(このリストは/home/<username>/.ssh/authorized_keys2に格納されます。または、rootの場合は/root/.ssh/authorized_keys2)。すでにパスワード認証を無効にしている場合でも、コンピューターを追加できます。 (クライアントコンピューターの/home/username/.ssh/id_rsa.pubにある)公開キーをUSBスティックのようなものにコピーし、id_rsa.pubの内容を/ home/<の最後に追加するだけです。サーバー上のusername> /。ssh/authorized_keys2ファイル。 (サーバーでcat /media/USB/stick/path/to/id_rsa.pub >>/home/<username>/.ssh/authorized_keys2
などのコマンドを実行することでこれを実行できます。)
コンピューターに特定のIP範囲がある場合は、iptablesを使用してアクセスを制御できます。 iptablesはカーネルの一部です。ファイル/etc/iptables
でそれらを制御できます
# from /etc/iptables
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
#
# loopback device
#
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
#
# all connections already established (started outgoing from my machine)
#
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#
# but SSH - restricted
#
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 --source 138.232.0.0/255.255.0.0 -j ACCEPT
#
# block all others (without answering - thus nobody is able to scan the network)
#
-A INPUT -p icmp --icmp-type echo-request -j DROP
-A RH-Firewall-1-INPUT -j DROP
COMMIT
興味深い行はこれです:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 --source 111.111.0.0/255.255.0.0 -j ACCEPT
Prot 22はデフォルトのsshポートです。マシンによって異なる場合は、変更してください。 111.111.0.0/255.255.0.0 -j ACCEPT
は、 '111.111.foo.bar'からのすべての接続を受け入れることを意味します。'foo 'および' bar 'は3桁です。