sshのパスフレーズを無くしたい

ssh-keygenコマンドで秘密鍵と公開鍵を作成するときにパスフレーズありで秘密鍵と公開鍵を作成した場合、ssh接続する時に毎回パスフレーズを求められます。

毎回パスフレーズを打つのも面倒な場合は、解除方法もあります。

ssh-keygen -p -f 秘密鍵

例えばid_rsaパスフレーズを解除したい場合は下記のコマンドを打てばokです。

ssh-keygen -p -f ~/.ssh/id_rsa 

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コンテナ内に登録するやり方で、
こちらはコンテナ側で秘密鍵と公開鍵を作成し、秘密鍵をホスト側に持ってくるやり方となります。
前者がgithubssh接続するときに設定したやり方で、後者がawsでEC2にssh接続するときのやり方になってくると思います。

qiita.com

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から遷移元のページが操作できてしまうので セキュリティ対策としてnoreferrernoopenerをつけるといいですが、noreferrerをつけてリファラーを送らないようにすると自動的にnoopenerも設定されるようです。 つまり、

  • noopener
    遷移先ページのwindow.openernull
    遷移先ページのリファラdocument.referrer(javascriptで参照する場合)やrequest.referrer(railsで参照する場合)で取得可

  • noreferrer
    遷移先ページのwindow.openernull
    遷移先ページのリファラdocument.referrerは空の文字列、request.referrernil

となるようでした。