ssh接続についてdockerを使って試してみた
今日はdockerコンテナにssh接続をすることを試してみました。
まず以下のDockerfileを作成しbuildします。
FROM ubuntu:latest RUN apt-get update -qq && apt-get install -y openssh-server vim && ssh-keygen -t rsa -f docker_rsa RUN mkdir /root/.ssh && cp docker_rsa.pub /root/.ssh/authorized_keys # これが無いとsshdが起動しないっぽい RUN mkdir /var/run/sshd # rootのパスワードをrootpasswdに設定します。ただし、公開鍵認証でのアクセスなので使用しませんが。。 RUN echo 'root:rootpassws' | chpasswd # sshのrootでのアクセスを許可します。ただし、パスワードでのアクセスは無効 RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config # sshのポートを22 => 20022に変更します RUN sed -i 's/#Port 22/Port 20022/' /etc/ssh/sshd_config EXPOSE 20022 CMD ["/usr/sbin/sshd", "-D"]
2行目のssh-keygen
コマンドで秘密鍵と公開鍵を作成し、公開鍵の方をauthorized_keys
として/root/.ssh/
フォルダ配下に格納しています。
下の方でsed
コマンドでsshd_config
ファイルの書き換えを行っています。
docker build -t ssh-test .
ビルドが完了したらコンテナを作成し起動します。
docker run -itd -p 20021:20022 ssh-test
作成した秘密鍵はssh接続の時に利用するので、docker cp
コマンドで~/.ssh/
配下に秘密鍵をコピーします。
docker cp <コンテナのID>:/docker_rsa ~/.ssh/
~/.ssh
フォルダ配下にあるconfig
ファイルに下記を追加します。
Host ssh-test HostName localhost User root IdentityFile ~/.ssh/docker_rsa
以上の設定をすることでssh接続ができるようなります。
ssh ssh-test -p 20021
上のコマンドを打つとコンテナにssh接続で入ることができます。
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.10.104-linuxkit x86_64)
本内容については下記の記事が参考になりました。
下記の記事ではホスト側で作成した秘密鍵と公開鍵を使用し、
ホスト側の公開鍵をdockerコンテナ内に登録するやり方で、
こちらはコンテナ側で秘密鍵と公開鍵を作成し、秘密鍵をホスト側に持ってくるやり方となります。
前者がgithubでssh接続するときに設定したやり方で、後者がawsでEC2にssh接続するときのやり方になってくると思います。
git cherry-pickについて
今日はgitのcherry-pickについて学びました
cherry-pickは特定のコミットを取り入れる機能ですが実際動かして学習してみました。
まず準備としてdevelopブランチからfeatureブランチに移動し、featureブランチで下記のシェルスクリプトを実行します。
#!/bin/bash for i in `seq 10` do echo ${i} >> a${i}.txt git add . git commit -m "create${i}" done
git log --oneline
をすると下記のよう表示されると思います。
b6e57df (HEAD -> feature) create10 b7b6e7f create9 1b4cd2d create8 4604f6c create7 13e25b3 create6 970477b create5 b0baf4d create4 27d9dd8 create3 9ea619c create2 acafaef create1
ここでdevelopブランチに移動しcreate2とcreate4のコミットを取り入れたい場合は
git cherry-pick 9ea619c b0baf4d
を実行します。実際ls
コマンドを実行するとa2.txt, a4.txtが作られていること、
a2.txt a4.txt s.sh
git log --onelineを実行するとcreate2とcreate4のコミットが取り入れられていることが確認できると思います。(新しいハッシュ値として取り入れられていることも確認できます)
b0bf0bb (HEAD -> develop) create4 2e3ca18 create2
連続する区間を取り入れたい場合は..でつなぎます。
git cherry-pick 13e25b3..1b4cd2d
始点の13e25b3に相当するcreate6ではなく次のcreate7から取り入れられることに注意です。
a2.txt a4.txt a7.txt a8.txt s.sh
次に、コンフリクトが起きた時の動作も見て見たいので一旦ファイルを全部削除し、新たにa5.txtを作成しコミットまで行うことにします。
rm a* echo aaa >> a5.txt git add . git commit -m a5
ここでcreate2からcreate10までのコミットを取り入れてみます。
git cherry-pick acafaef..b6e57df
するとcreate5でコンフリクトが発生します。
cherry-pickをキャンセルしたい場合はgit cherry-pick --abort
を実行します。
もう一度下記のコマンドを実行しコンフリクトを発生させます。
git cherry-pick acafaef..b6e57df
create5の取り込みのみスキップしたい場合はgit cherry-pick --skip
を実行します。
git log --oneline
で見てみるとcreate5の取り込みのみスキップされていることが確認できます。
f592097 (HEAD -> develop) create10 7fd9010 create9 6198ec3 create8 79f1fb0 create7 b38fe8d create6 4333f85 create4 3a93de5 create3 4254c42 create2
次にエディタ等でコンフリクトを解消する方法を見ていきます。もう一度a5.txt以外のファイルを全部消して下記のコマンドを実行しコンフリクトを発生させます。
git cherry-pick acafaef..b6e57df
するとa5.txtでコンフリクトが発生するのでvscodeで開き取り込みたい方を選択しgit add a5.txt
をした後
次のコマンドを実行することでコンフリクトを解消することができます
git cherry-pick --continue
git log --oneline
でコミット履歴を見てみると今度はcreate5も取り入れられていることをが確認できると思います。
9759f9c (HEAD -> develop) create10 5d10218 create9 091d93e create8 b557c16 create7 f352842 create6 e695bb0 create5 e3a852c create4 949d001 create3 b795626 create2
以上git cherry-pickについての動作を確認してみました。
noreferrerとnoopenerについて
target属性に_blankが付加されたaタグやwindow.openで新規タグや新規ウインドウで新しいページを開くとき
デフォルトだと遷移先のwindow.openerから遷移元のページが操作できてしまうので
セキュリティ対策としてnoreferrer
やnoopener
をつけるといいですが、noreferrer
をつけてリファラーを送らないようにすると自動的にnoopener
も設定されるようです。
つまり、
noopener
遷移先ページのwindow.opener
はnull
遷移先ページのリファラはdocument.referrer
(javascriptで参照する場合)やrequest.referrer
(railsで参照する場合)で取得可noreferrer
遷移先ページのwindow.opener
はnull
遷移先ページのリファラはdocument.referrer
は空の文字列、request.referrer
はnil
となるようでした。
初投稿
初めまして
某プログラミングスクールを卒業して現在Web系のエンジニアとして働いているものです。
学んだことや技術的内容をここでアウトプットしていければなと思ってます。