SSHとは
SSHとは?仕組みとSSHサーバーの設定をわかりやすく解説します! | カゴヤのサーバー研究室
初心者がSSHについて学ぶ(´・ω・`) - Qiita
SSHとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
https://e-words.jp/w/ssh.html
TCP/IP - Telnetとは、SSHとは
- 「Secure Shell(セキュア・シェル)」の略
- telnet の通信が暗号化できるようになったもの
- telnet
- 他のコンピュータを遠隔操作するための仕組み
- こちらは通信が暗号化されていない。非推奨。
- SSHには、SSH1 と SSH2 の2種類の通信手段(プロトコル)がある
- SSH1は非推奨
- 使われているのはほとんどSSH2
- サーバー側で「SSHデーモン」、クライアント側で「SSHクライアント」が起動されている必要がある。
-
sshd (ssh daemon)
- UNIXのOSで外部からのssh接続を受け付ける常駐プログラム
- 通信経路の暗号化や利用者の認証、操作コマンドの受信と実行などを行なう
-
sshクライアント
- PuTTY - Wikipedia
- Tera Term - Wikipedia
- https://ja.wikipedia.org/wiki/OpenSSH
- windows
- Windows 10 からは標準で利用できるらしい
- Mac
- 標準のターミナルで接続できる
-
- 「パスワード認証方式」と「公開鍵認証方式」の2通りがある
- パスワード認証方式
- 接続先のサーバーで作成した、ユーザー名とパスワードを利用する
- パスワードが流出したら誰でも接続できてしまう
- 公開鍵認証方式
- ローカルで作成した、公開鍵と秘密鍵を利用する
- 公開鍵を接続先のサーバーに登録する
- 対応する秘密鍵を持っているクライアントだけが接続できる
- パスワード認証方式
ssh/.config とは
~/.ssh/configについて - Qiita
.ssh/configファイルでSSH接続を管理する - Qiita
- sshの設定ファイル
- ssh/.configに設定を記載しておくと長いコマンドをいちいち打たなくてもいい
gitHubにアクセスするときにも使ったりする
DokcerでたてたサーバーにSSHで接続してみる
Docker | 公開鍵でコンテナにssh接続する出来るようにするDockerfileの例 - Qiita
この記事を参考にさせてもらってローカルでsshを試してみた
とりあえずコピペで接続できたので、内容を詳しく見てみる
Dockerfileを読んでみる
FROM ubuntu:16.04
# 1
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
# 2
# ssh設定ファイルの書換え
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
# 3
# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
# 4
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
# 5
# 手元の公開鍵をコピー
COPY id_rsa.pub /root/authorized_keys
# 6
# ssh用の port を晒す
EXPOSE 22
# 7
# 公開鍵を使えるようにする (パーミッション変更など)
CMD mkdir ~/.ssh && \
mv ~/authorized_keys ~/.ssh/authorized_keys && \
chmod 0600 ~/.ssh/authorized_keys && \
# 最後に ssh を起動
/usr/sbin/sshd -D
- #1
- openssh-serverをインストールしている
- これがSSHデーモンってことでいいのか?
-
RUN mkdir /var/run/sshd
これがないとエラーになる。必要なディレクトリってことはわかったけど、なんで必要なのかはわからなかった。
- openssh-serverをインストールしている
docker run -p 10000:22 ssh_server
Missing privilege separation directory: /var/run/sshd
- #2
- RUN
- Dockerfile リファレンス — Docker-docs-ja 19.03 ドキュメント
-
RUN 命令は、現在のイメージの最上位の最新レイヤーにおいて、あらゆるコマンドを実行します。
-
sed -i
を実行してる- 【 sed 】コマンド(基礎編その4)――文字列を置き換える/置換した行を出力する:Linux基本コマンドTips(56) - @IT
-
sed -i
は特定のファイルを編集する- 【 sed 】コマンド(応用編)――正規表現を使って文字を置き換える:Linux基本コマンドTips(57) - @IT
-
文字列の置き換えは、「s/置換前/置換後/」で行います。例えば、「s/jpg/jpeg/」で「jpg」を「jpeg」に置き換えることができます。
- つまり
-
/etc/ssh/sshd_config
ファイルにPermitRootLogin prohibit-password
をPermitRootLogin yes
-
/etc/ssh/sshd_config
ファイルに#PasswordAuthentication yes
をPasswordAuthentication no
に変更している
-
-
/etc/ssh/sshd_config
-
基礎から学ぶ!最初にやるべきSSHのセキュリティ設定【全コマンド例付き】 – Hacker’s High
- sshのサーバー側の設定ファイル
-
基礎から学ぶ!最初にやるべきSSHのセキュリティ設定【全コマンド例付き】 – Hacker’s High
-
PermitRootLogin prohibit-password
- ルートユーザーとしてパスワードでログインすることのみを無効化している
-
PermitRootLogin yes
- ルートユーザーでログインすることを許可する
-
PermitRootLogin prohibit-password
のままでも別によかったのか??- 試してみたら
PermitRootLogin prohibit-password
のままでもいけた
- 試してみたら
-
PermitRootLogin yes
- sshでrootによるログインを許可している
- これがnoに設定されてるとssh接続用のユーザーを作成したりしないといけないのか
-
PasswordAuthentication no
- パスワード認証によるsshアクセスを禁止している
- RUN
- #3
-
/etc/pam.d/sshd
- openSUSE 13.1: 第2章 PAM を利用した認証
-
PAM設定ファイルの意味と書き方メモ - Qiita
- PAM
- ユーザー認証を行うための仕組み
-
PAM の仕組みを使用するそれぞれのサービス (プログラム) に対して、 /etc/pam.d/ ディレクトリ内に別々の設定ファイルを 用意して使用します。たとえば sshd サービスに対する設定は、 /etc/pam.d/sshd ファイルで設定します。
- PAM
-
Docker: Set pam_loginuid to optional (#3027) · Issues · GitLab.org / GitLab FOSS · GitLab
-
s@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g
これは何をしているんだろう
-
-
SSH デーモン用サービスの Docker 化 — Docker-docs-ja 19.03 ドキュメント
Dockerとは -Dockerの基本的な使い方- - ネットワークエンジニアを目指して
-
#4
- Dockerfile リファレンス — Docker-docs-ja 19.03 ドキュメント
- NOTVISIBLEに"in users profile"`という値を設定している
-
#5
- これは公開鍵を接続するサーバーへコピーしているだけ
-
#6
-
#7
- CMD
- https://docs.docker.jp/engine/reference/builder.html#cmd
-
シェル形式または exec 形式を用いる場合、CMD 命令は、イメージが起動されたときに実行するコマンドを指定します。
- イメージが起動した時の処理を書いてるんだな
-
mkdir ~/.ssh
- sshディレクトリを作成している
-
mv ~/authorized_keys ~/.ssh/authorized_keys
- ローカルからコピーしてきた公開鍵を
~/.ssh/authorized_keys
に設置
- ローカルからコピーしてきた公開鍵を
-
~/.ssh/authorized_keys
- 12.2.4. 鍵ベース認証の使用 Red Hat Enterprise Linux 6 | Red Hat Customer Portal
- 公開鍵暗号を用いてのSSH接続(きほん) - Qiita
- サーバー側の公開鍵の置き場所が決まってるってことなのかな
-
chmod 0600 ~/.ssh/authorized_keys
-
~/.ssh/authorized_keys
のパーミッションは0600
にする必要があるらしい - authorized_keysのパーミッション - アオミドロ草
-
-
/usr/sbin/sshd -D
- SSHデーモンを動かしてるのか
- sshd(8) manページ
-
-D このオプションが指定されると sshd は切り離し (detach) をおこなわず、デーモンにはなりません。 これは sshd の監視を簡単にします。
- -D の説明はよくわからなかった
- CMD
コマンドの意味を調べる
-
$ ssh-keygen -f ./id_rsa -t rsa -b 4096 -C ‘example@com’ -N ‘’
- 【 ssh-keygen 】コマンド――SSHの公開鍵と秘密鍵を作成する:Linux基本コマンドTips(327) - @IT
-
$ ssh-keygen -f ./id_rsa
- カレントディレクトリに
id_rsa
というファイル名で秘密鍵を作成id_rsa.pub
という名前で公開鍵も作成される
- カレントディレクトリに
-
-t rsa
- 暗号化形式を指定rsa方式で作成している(デフォルトもrsa)
- http://it-knowledge.tank.jp/ed25519-github/
- SSH は (RSA 鍵より) ED25519 鍵の方が強固で速い - らくがきちょう
-
ed25519
で作るのが良さそう
-
-b 4096
- 作成する鍵のビット数を指定
- 4096bitで作るのが良さそう
-
-C ‘example@com’
- コメント
-
-N ""
- パスフレーズを指定
- 秘密鍵をパスフレーズで暗号化できるらしい
-
docker image build . -t ssh_server
-
Dockerfileとdocker buildコマンドでDockerイメージの作成:いまさら聞けないDocker入門(3)(1/2 ページ) - @IT
-
.
Dockerfileのあるディレクトリ -
-t ssh_server
イメージに名前をつける
-
docker run -d -p 10000:22 ssh_server
- run — Docker-docs-ja 19.03 ドキュメント
-
-d
コンテナをバックグラウンドで実行 -
-p
コンテナのポートをホスト側に公開
-
ssh root@127.0.0.1 -p 10000 -I id_rsa
- 【 ssh 】コマンド――リモートマシンにログインしてコマンドを実行する:Linux基本コマンドTips(80) - @IT
- rootユーザーで
127.0.0.1
(ローカルホスト)に接続 -
-p 10000
接続に使用するポート番号を指定、コンテナ側のポート22番がローカルの10000に公開されているので接続できる