トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

SSH2によるリモートサーバアクセス

SSH2によるリモートサーバアクセス

リモート環境からサーバをいじらないといけない状況にはよく出くわすと思います。専用サーバを借りて運用しているこのサイトでも同様です。デフォルトではtelnetアクセスが有効ですが、これはネットで情報をやりとりする場合は平文(データは暗号化されずにそのまま流れる)です。極端な例ですが、ネットのどこかで経路中のサーバ上で流れるデータを監視できたとすると、telnetにログインするためのパスワードから「su - root」として入力したパスワードも見ることができてしまう可能性もあるかもしれません。

ですので、遠隔操作の際は安全ためにSSHにてアクセスするのが一般的です(telnetポートは閉じてアクセスできないようにする)。

いきなりtelnetを閉じると経路自体が途絶えてにっちもさっちも行かなくなるので、先にSSHにアクセスする準備を進めます。

SSHにてサーバにアクセスする

iptablesにて、ポート22(ssh)が開いているか確認します。

iptables -L

の一覧でsshがACCEPTになってますでしょうか。

外からのアクセスが許可されていない(DROP状態)ならACCEPTにします。

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --sport 22 -j ACCEPT

プロセスを見るため、

ps -aux

としたときにsshサービスが起動しているか確認します。といっても、デフォルトでsshのサービスが起動していると思いますので その場合はサーバはアクセス準備できてます。

クライアントマシンからSSHログイン

どちらかというと、外部アクセスするためのツール選びが重要です。ここでは、Puttyというのを使用します(Windows環境からアクセスする場合)。以下からダウンロードできます。

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

「putty.exe/puttygen.exe」を使います。

また、putty.exeを日本語化するために以下よりをダウンロードします。「PuTTY で ISO 2022 による日本語入力・表示を可能にするパッチ」より、「puttyjp.exe」を得ます。

http://hp.vector.co.jp/authors/VA024651/download.html

puttyjp.exeを起動します。ここで、アクセスするホスト名を指定しSSHをチェックし、一番下の「開く」ボタンを押します。

これでユーザ名・パスワードを聞いてきますので、後はtelnetと同じように操作できます。

以上で、ネット中の経路は暗号化されますのでtelnetを無効にすると一件落着・・・・ではありません(^_^;;。ユーザ名とパスワードさえ分かれば誰でもアクセスできてしまいます。総当りにユーザ名・パスワードを連投されるといずれは破られますので、もっと強固にします。

次に、SSH2でRSA公開鍵を使ってアクセスする設定を行います。

SSH2で公開鍵を使ってサーバにアクセスする

またサーバ側の設定に戻ります。念のためですが、設定が完全に完了するまではtelnetは生かしておいてください(ssh2の設定に失敗した場合はtelnetで解除できるように)。

公開鍵と秘密鍵の生成

先ほどダウンロードした「puttygen.exe」を起動します。

「Generate」を選択すると、プログレスバーが表示されます。ここで、マウスをぐりぐり動かすとバーが進行します。どんどんマウスを小刻みに動かしながら進めると、以下のような表示となります。

「Key passphrase」に入れるパスフレーズがサーバにssh2で入る場合に入れるものです(暗号キーとこのパスフレーズにてログイン権限を強化しているわけです)。「Confirm passphrase」にも同じものを入れます。

この後、「Save public key」ボタンを押して「xxxx.pub」のようなファイルで保存します。「Save private key」ボタンを押して「xxx.ppk」のようなファイルで保存します。これが、公開鍵(public)・秘密鍵(private)と呼ばれるものになります。秘密鍵は、クライアントからログインするときに必要となります。

この後、公開鍵(xxx.pub)をサーバに転送してください。

サーバにて公開鍵をssh2用に配置

以降、サーバ(Linux)側での設定です。鍵の設定は各ユーザごとに指定します。

例えば、「hoehoe」のユーザに作成した公開鍵を設定するとします。ユーザのホームディレクトリに「.ssh」ディレクトリを作成し、ここにssh2用の公開鍵を配置することになります。

mkdir /home/hoehoe/.ssh
cd /home/hoehoe/.ssh

とし、「.ssh」ディレクトリ内にWindowsで作成した「xxx.pub」をコピーしてきてください。そして以下を実行します。

ssh-keygen -i -f xxx.pub >> authorized_keys2

「authorized_keys2」がssh2用の公開鍵として使用されるものです。「xxx.pub」は不要となりますので削除してもOKです。

これでPuttyのssh2でログインユーザ名「hoehoe」で入ると、パスフレーズを聞いてきます。指定したパスフレーズでログインすることが可能となります(xxx.ppkの秘密鍵もPuttyにて指定しておく必要があります)。

サーバのセキュリティ設定を強化

ログインがssh2で指定の秘密鍵とパスフレーズによりできることを確認してから、サーバのセキュリティを強化していきます。ssh2でリモート接続してから行うようにしてください。

telnetサービスを遮断

telnetの場合は暗号化されずに垂れ流しですので、これ自身をiptablesにて遮断します。

iptables -A INPUT -p tcp --dport 23 -j DROP
iptables -A INPUT -p tcp --sport 23 -j DROP

SSHのセキュリティ強化

「/etc/ssh/sshd_config」がsshの設定ファイルになります。これをviで開き、以下のように変更します。

#PermitRootLogin yes
  ↓
PermitRootLogin no        ← rootでのログインを禁止

#PasswordAuthentication yes
  ↓
PasswordAuthentication no ← パスワードでのログインを
                               禁止(鍵方式によるログインのみ許可)
#PermitEmptyPasswords no
  ↓
PermitEmptyPasswords no   ← パスワードなしでのログインを禁止

#ServerKeyBits 768
  ↓
ServerKeyBits 1024 ← 暗号強度を1024ビットにする
                        PuTTYからの接続時にServer refused our key
                        というエラーが出てしまうことの対処

そして、sshを再起動します。

/etc/rc.d/init.d/sshd restart

これで、鍵を使用したssh2ログインしか許されないようになります。

Future's Laboratory 技術格納庫 2004-2013 Yutaka Yoshisaka.