どぼじょのIT学習ブログ

高専卒土木女子がIT業界を目指してお勉強。

【FJORD】sshの基本

本日はsshというものを勉強します。

目次

1.sshとは

sshとは"Secure Shell"の略で、インターネットを経由して別のコンピューターにログインする際、安全にアクセスするためのソフトウェアのひとつです🙂
通信経路を公開鍵暗号秘密鍵暗号の組み合わせにより暗号化することで、安全な接続をするそうです。
つまり、安全に別のコンピューターの遠隔操作(認証情報やコマンドのやりとり)ができます!👌
ちょっと雑すぎですが、だいたいこんな感じだと思います笑
f:id:mistyrinth:20181019135107p:plain
このクライアント側とサーバー側で設定を進めるわけですが、どちらでの作業か理解しながら進めていくのがとても重要です🔑
なお、わたしはクライアント側が自分のmacbook、サーバー側がさくらVPSdebianとなります。
sshはデフォルトではパスワード認証ですが、セキュリティ向上のため、公開鍵認証に切り替えていく必要があります。

2.sshインストール(サーバー側:debian操作)

サーバー側のrootユーザーまたはsudoaptitude updateaptitude install sshを実行することで、OpenSSHクライアントとOpenSSHサーバーをインストールできます。

3.sshの設定(サーバー側:debian操作)

sshの設定ファイルはsshd_configです。
これをエディタで編集することで、設定の変更ができます💪ただしこれに限らず、設定ファイルは変更前にバックアップをとっておくことを推奨します🙏
sshd_configを開くと、こんな感じで下のほうまで長々と設定が書かれています👀
f:id:mistyrinth:20181018203351p:plain

3-1. rootユーザーのssh接続を拒否

最初にやることとして、rootユーザーからのssh接続を拒否します。理由は辞書攻撃などでrootユーザーのパスワードの文字列さえ判明してしまうと、不正アクセスされてしまうおそれがあるからです😢
この中に#PermitRootLogin prohibit-passwordというところがあるので、コメントアウト#を消してprohibit-passwordnoにします。
f:id:mistyrinth:20181018213337p:plain
こうすることで、公開鍵でしかログインできないようになるそうです。

3-2. ポート番号を変更

デフォルトでは22番になっているポート番号ですが、0〜65535のうち好きな数字に変えることができます。※コメントアウト#を外すのを忘れると適用されません💀
f:id:mistyrinth:20181018210108p:plain
22番のままでも使えるのですが、デフォルトが22番のため、世界中の22番ポートが無差別に攻撃されることがあるらしく、攻撃の的になりやすいそうです。
また、0〜1023番はウェルノウンポートと言って、著名なサービスやプロトコルがサービスのために予約をしている番号だそうです。なので攻撃の標的になりたくなければ、これも避けたほうが良さそう😶

3-4. sshの再起動

設定が終わったら、sudo /etc/init.d/ssh restartsshを再起動し、完了です!✨

4.キーペアを作成(クライアント側:Terminal操作)

ssh-keygenを実行して、ガイダンスに従って進めると、最終的に以下のような画面になります👀
f:id:mistyrinth:20181019150819p:plain
randomart imageの下に四角い変な記号の集合体が気になりますね笑
これは、鍵がテキストファイルであり、書き換えられても普通は気づけないことから、鍵を見てわかる形に表してくれているそうです。
なので、誰かがどうにかしてわたしの鍵を書き換えると、この絵も変わるそうです💡
公開鍵と秘密鍵をちゃんと作れているか確認します。
f:id:mistyrinth:20181019150017p:plain
ホームディレクトリの下には.sshというディレクトリが作成され、その中にid_rsaid_rsa.pubの2つができていることが確認できました!
id_rsa秘密鍵id_rsa.pubが公開鍵となります。

5.公開鍵をサーバーに送信

5-1. 公開鍵を受信する準備(サーバー側:debian操作)

クライアント側で作成したキーペアのうち、公開鍵をサーバーに送信します。
そのための前準備として、サーバー側でやっておくことが2つあります。

f:id:mistyrinth:20181019172007p:plain
chmodのあとの700は、所有者のみに全ての権限があるという意味です。
u+xなどの組み合わせを数字3桁にまとめて書くことができます💡
いろいろ種類があるのですがここでは割愛🙏
今、.sshディレクトリの権限は以下のようになっています。
f:id:mistyrinth:20181019172647p:plain

5-2. 公開鍵をサーバーに送信(クライアント側:Terminal操作)

続いて、作成した公開鍵をサーバーに送信します🚛
※注意:秘密鍵を送ってはだめです
scp -P [ポート番号] id_rsa.pub [サーバー側ログインユーザー名]@[サーバーIPアドレス]:~/.ssh/authorized_keysを実行します。
f:id:mistyrinth:20181019194716p:plain
yesを選択して初めて実行すると警告が出るのですが、もう一度同じコマンドを実行すると、今度はサーバー側ユーザーのパスワードを聞かれるので、入力します。

5-3. 送信された公開鍵の権限を変更(サーバー側:debian操作)

サーバー側の~/.sshに公開鍵authorized_keysが送信されたので、サーバー側の公開鍵の権限を変更します。
f:id:mistyrinth:20181019200912p:plain
今度はchmodのあとが600です。600は、所有者にのみ変更権限がある状態を指します。

6.パスワードによるログインを禁止(サーバー側:debian操作)

今後、パスワードによるログインを禁止することで、公開鍵のみのログインが可能となります。
#PasswordAuthentication yes#をはずし、yesnoにします🔑
f:id:mistyrinth:20181018211413p:plain

※この作業を最初の設定と同時に行ってしまうと、公開鍵を送信するときにエラーで進まなくなります💦
設定が終わったら、3-4と同様にsudo /etc/init.d/ssh restartsshを再起動します。
以上で、クライアント側のTerminalからdebianにログインできるようになりました!🎉🎉

7.クライアント側からログインする(クライアント側:Terminal操作)

macのTerminalからログインしてみます。
f:id:mistyrinth:20181019203039p:plain
ssh -p [ポート番号] [サーバー側のユーザー名]@[サーバーIPアドレス]でログインできました👏👏👏