超入門 OpenSSH Ver.2

sshとは
物理的に離れているサーバーに対し、ネットワークを介して
アクセスするプロトコルです

リモートログインと言う呼び方もされています

リモートログインには長い間
telnetと言うプトロコルが利用されていました

しかし、telnetにはデーターを素のまま(平文)で流してしまう欠点があります

ネットワーク上を流れるデーターが盗聴され、
ログイン情報など非常に重要なデーターさえも
第3者に知られてしまう場合がありました

そこで、安全な運用を実現するために
データーの暗号化と確実なホスト認証が必要とされ
これを実現したのが「ssh」です

sshの具体的な暗号化技術とホスト認証技術は別の機会にするとして
実際にLinuxに実装されているOpenSSHをTeraTermで、遠隔操作してみましょう

———————————————————-
MacOSの方:
  「Finder」→「アプリケーション」→「ユーティリティ」→「ターミナル」

ssh(サーバーIPv4アドレス) -l(一般ユーザーID)

Linuxクライアントの方:
  ターミナルからコマンドでSSH接続します
———————————————————-

まずはConoHa-VPSのIPアドレスを確認してください
011
133.130.###.### とあります

続いてTeraTermを起動してください
012
新しい接続が出ましたら
ホスト部分にIPアドレスを入力してください
TCPポートは22番です

OKをクリックしてください
013
最初にssh接続したクライアントはなりすまし防止として
セキュリティ警告が出ます

間違いなく自分のサーバーであれば
続行をクリックしてください

014
ユーザー名:root
パスフレーズ:rootのパスワード

015
ログインができましたでしょうか

ここで1つセキュリティのお話しです

rootはそのサーバーに対して何でも出来る
「神」のような存在です

そのrootは先ほどConoHaで設定していただいた
rootパスワードによって認証されます

ユーザー名はroot固定です

つまり、パスワードさえわかってしまえば
すぐにクラックされ、侵入されてしまいます

侵入されたサーバーはサーバー内にある
データーベースにアクセスしたり個人情報などを盗み取ったり
それを外部のサーバーへ転送したり
あるいは、踏み台にされ他のサーバーに対しDos攻撃をしたり

これらはスクリプトによって、全て自動で実行されます

何が怖いかと言うと、知らない間に管理しているサーバーが
悪者にされ、強いては冤罪にまで
なってしまうということです

これを防止するため、余計なサービスやポートを稼働させない
サーバーのセキュリティをほどこしたり
ログの管理をするなど、様々な管理が必要になってきます

そこで、ssh接続のセキュリティを1つ上げる方法をご紹介します

今、TeraTermでいきなりrootログインが出来てしまいましたが
これを禁止して、まず一般ユーザーからログインし
その後rootユーザーにログインする方法です

これにより、2段階の認証に成功しないと
rootになれませんので、セキュリティが向上します

では、やってみましょう

まずは最初にログインする一般ユーザーを1つ作ります
ユーザー名はseito

# useradd seito

続いてユーザーseitoのパスワードの設定
# passwd seito

パスワードは共通ルールで作成してください

seitoユーザーが作成できましたら
seitoへログインしてみましょう

exitと入力して一旦TeraTermを終了し
もう1度起動します

ホストのIPアドレスを確認してOKをクリックし
SSH認証でユーザーseitoでログインしてみましょう

020

ログインできましたでしょうか

では、この状態でrootへログインします

$ su

rootにログインできましたでしょうか

では、これよりssh一発目rootログインの禁止設定をしていきます

とその前に
この設定はエディタを使って行うので、先に【3)vi操作】をやっていきましょう

3)超入門 vi操作

4)超入門 OpenSSH(セキュリティ設定編)
では、超入門 OpenSSH(Tera Term)に戻りまして
このviを使って、練習を兼ねながら本番設定といきましょう

以下の設定ファイルをviで開いてみましょう

# vi /etc/ssh/sshd_config

rootログインを制御しているのは以下の文です
PermitRootLogin yes

rootログイン = yes
となっていますので、rootログインyesと言う設定になっています

これをrootログイン = no と言う設定に変更しましょう

コマンドモードで[y][y]でコピー
そして[p]で貼り付け

PermitRootLogin yes
PermitRootLogin yes

[i]を押して編集モードにします

#PermitRootLogin yes コメントして
PermitRootLogin no と書き換えます

[Esc]でコマンドモードに戻り
:wq で保存終了

設定が終わったらsshdを再起動しましょう

# systemctl restart sshd

これで、rootログインが出来なくなってるか確認してみましょう

一旦Tera Termを再起動し
rootログイン出来ますでしょうか

この他にもsshのセキュリティを上げる方法がいくつかあります

ポート番号がデフォルトで22ですが、これを変更したり
fail2banと言うサービスを導入したり

fail2banは一定回数認証が失敗した場合、
認証を試みるipアドレスを一定時間遮断します

パスワード総アタックを試みるスクリプトに有効なサービスでしょう

そのほかにも様々ありますが
それはまた別の機会で

これで、安全なリモートログインがとりあえず確立しました

では、もう少しsshについてやって行きましょう

今の設定は外部からsshで一般ユーザーでログインし
その後、rootへログインしました

sshは何も外部から接続するだけでなく
ネットワーク内のサーバー同士に接続したり
あるいは、ローカルマシンの中でもssh接続が出来てしまうんです

ではrootからseitoへssh接続してみましょう
# ssh 一般ユーザー名 @ 接続先のホスト(IPアドレスなど)

# ssh seito@localhost

一番最初に接続した場合、なりすまし接続を防止するため
このホストを信用するか確認メッセージがでます

・・・
Are you sure you want to contine connecting (yes/no)?

「yes」で返しましょう

Warning: Pemanently added ‘XXX.XXX.XXX.XXX’ (RSA) to the list of known hosts.
seito@localhost’s password:
ユーザーseitoのパスワードを入力します
これで、接続先のホスト認証鍵がクライアント側に登録されました

次回からは、この認証鍵を使ってサーバー側のペア鍵をチェックすることを表しています

ログインが成功すると
[一般ユーザー@ホスト] $ に変わっているのが解ると思います

rootでログインし、さらに一般ユーザーへログインし
やろうと思えば、ここから別ユーザーへログインしたり・・・

ちょっとやってみましょう
ユーザーを切り替えるコマンドは su

$ SU
Password

これをほっとくと
2重3重とログインしていくので
どんどん動作が重くなっていきます

現在のユーザーからログアウトしたい時は「exit」と入力すれば
1つ前のユーザーに戻ります

また、ssh接続から抜けるときも「exit」と入力します

これがsshの大まかな動作です

Linux同士やMacOSなどはターミナル同士では、こうした接続が可能ですが
Windowsの場合、ターミナルがありませんので
sshクライアントソフト=「TeraTerm」を使います

そして、このsshを使うことが出来るなら
外部からの接続で、ほぼすべてのサーバーを構築することが可能となります