【FJORD】sshの基本
本日はsshというものを勉強します。
目次
- 1.sshとは
- 2.sshインストール(サーバー側:debian操作)
- 3.sshの設定(サーバー側:debian操作)
- 4.キーペアを作成(クライアント側:Terminal操作)
- 5.公開鍵をサーバーに送信
- 6.パスワードによるログインを禁止(サーバー側:debian操作)
- 7.クライアント側からログインする(クライアント側:Terminal操作)
1.sshとは
sshとは"Secure Shell"の略で、インターネットを経由して別のコンピューターにログインする際、安全にアクセスするためのソフトウェアのひとつです🙂
通信経路を公開鍵暗号と秘密鍵暗号の組み合わせにより暗号化することで、安全な接続をするそうです。
つまり、安全に別のコンピューターの遠隔操作(認証情報やコマンドのやりとり)ができます!👌
ちょっと雑すぎですが、だいたいこんな感じだと思います笑
このクライアント側とサーバー側で設定を進めるわけですが、どちらでの作業か理解しながら進めていくのがとても重要です🔑
なお、わたしはクライアント側が自分のmacbook、サーバー側がさくらVPSのdebianとなります。
sshはデフォルトではパスワード認証ですが、セキュリティ向上のため、公開鍵認証に切り替えていく必要があります。
2.sshインストール(サーバー側:debian操作)
サーバー側のrootユーザーまたはsudo
でaptitude update
とaptitude install ssh
を実行することで、OpenSSHクライアントとOpenSSHサーバーをインストールできます。
3.sshの設定(サーバー側:debian操作)
sshの設定ファイルはsshd_config
です。
これをエディタで編集することで、設定の変更ができます💪ただしこれに限らず、設定ファイルは変更前にバックアップをとっておくことを推奨します🙏
sshd_config
を開くと、こんな感じで下のほうまで長々と設定が書かれています👀
3-1. rootユーザーのssh接続を拒否
最初にやることとして、rootユーザーからのssh接続を拒否します。理由は辞書攻撃などでrootユーザーのパスワードの文字列さえ判明してしまうと、不正アクセスされてしまうおそれがあるからです😢
この中に#PermitRootLogin prohibit-password
というところがあるので、コメントアウトの#
を消してprohibit-password
をno
にします。
こうすることで、公開鍵でしかログインできないようになるそうです。
3-2. ポート番号を変更
デフォルトでは22番になっているポート番号ですが、0〜65535のうち好きな数字に変えることができます。※コメントアウト#
を外すのを忘れると適用されません💀
22番のままでも使えるのですが、デフォルトが22番のため、世界中の22番ポートが無差別に攻撃されることがあるらしく、攻撃の的になりやすいそうです。
また、0〜1023番はウェルノウンポートと言って、著名なサービスやプロトコルがサービスのために予約をしている番号だそうです。なので攻撃の標的になりたくなければ、これも避けたほうが良さそう😶
3-4. sshの再起動
設定が終わったら、sudo /etc/init.d/ssh restart
でsshを再起動し、完了です!✨
4.キーペアを作成(クライアント側:Terminal操作)
ssh-keygen
を実行して、ガイダンスに従って進めると、最終的に以下のような画面になります👀
randomart image
の下に四角い変な記号の集合体が気になりますね笑
これは、鍵がテキストファイルであり、書き換えられても普通は気づけないことから、鍵を見てわかる形に表してくれているそうです。
なので、誰かがどうにかしてわたしの鍵を書き換えると、この絵も変わるそうです💡
公開鍵と秘密鍵をちゃんと作れているか確認します。
ホームディレクトリの下には.ssh
というディレクトリが作成され、その中にid_rsa
とid_rsa.pub
の2つができていることが確認できました!
id_rsa
が秘密鍵、id_rsa.pub
が公開鍵となります。
5.公開鍵をサーバーに送信
5-1. 公開鍵を受信する準備(サーバー側:debian操作)
クライアント側で作成したキーペアのうち、公開鍵をサーバーに送信します。
そのための前準備として、サーバー側でやっておくことが2つあります。
chmod
のあとの700は、所有者のみに全ての権限があるという意味です。
u+x
などの組み合わせを数字3桁にまとめて書くことができます💡
いろいろ種類があるのですがここでは割愛🙏
今、.ssh
ディレクトリの権限は以下のようになっています。
5-2. 公開鍵をサーバーに送信(クライアント側:Terminal操作)
続いて、作成した公開鍵をサーバーに送信します🚛
※注意:秘密鍵を送ってはだめです
scp -P [ポート番号] id_rsa.pub [サーバー側ログインユーザー名]@[サーバーIPアドレス]:~/.ssh/authorized_keys
を実行します。
yes
を選択して初めて実行すると警告が出るのですが、もう一度同じコマンドを実行すると、今度はサーバー側ユーザーのパスワードを聞かれるので、入力します。
5-3. 送信された公開鍵の権限を変更(サーバー側:debian操作)
サーバー側の~/.ssh
に公開鍵authorized_keys
が送信されたので、サーバー側の公開鍵の権限を変更します。
今度はchmod
のあとが600です。600は、所有者にのみ変更権限がある状態を指します。
6.パスワードによるログインを禁止(サーバー側:debian操作)
今後、パスワードによるログインを禁止することで、公開鍵のみのログインが可能となります。
#PasswordAuthentication yes
の#
をはずし、yes
をno
にします🔑
※この作業を最初の設定と同時に行ってしまうと、公開鍵を送信するときにエラーで進まなくなります💦
設定が終わったら、3-4と同様にsudo /etc/init.d/ssh restart
でsshを再起動します。
以上で、クライアント側のTerminalからdebianにログインできるようになりました!🎉🎉
7.クライアント側からログインする(クライアント側:Terminal操作)
macのTerminalからログインしてみます。
ssh -p [ポート番号] [サーバー側のユーザー名]@[サーバーIPアドレス]
でログインできました👏👏👏