OAuth2.0 の仕組みとrfc

OAuth2.0って何??

OAuthは権限の認可を行うオープンスタンダード
OAuth2.0の4種類のロール
1.resource owner(リソースオーナー) ※エンドユーザーとも
2.resource server(リソースサーバー)
3.client(クライアント)
4.authorization server(認可サーバー)

WebserverA (エンドユーザー)からwebserverB(client)にアクセスすることを許可する
Aの信任を得た認可サーバーからBに対するアクセストークンを発行してもらい、Bにアクセストークンを渡す
Bのパスワードを入力せずに、Bの一部の権限だと実行することが重要

githubに公開鍵を登録して確認する方法

まず、ローカルのコマンドラインで、ssh-keygen -t rsaとして、公開鍵(id_rsa.pub)、秘密鍵(id_rsa)を作ります。

Github personal settingsのSSH and GPG keysにアクセスします。
https://github.com/settings/keys

右上のNew SSH Keyを押下。

title:公開鍵(id_rsa.pub)の名前を入れる。拡張子のpubは必要ないので、id_rsaのみ
Key:公開鍵の中身を入れます。

ssh -T git@github.comで接続確認
ローカルから、ssh -T git@github.comと打ち込みます。

>ssh -T git@github.com
Enter passphrase for key 'C:\Users\hoge/.ssh/id_rsa':
Hi githubix! You've successfully authenticated, but GitHub does not provide shell access.

You’ve successfully authenticatedと表示されればOK
簡単でしょ?

Could not open a connection to your authentication agent.

linuxにログインして、ssh-add -lと打つと、「Could not open a connection to your authentication agent.」と返ってくる。

agrant@precise64:~$ ssh-add -l
Could not open a connection to your authentication agent.

どうやらssh-agentが起動していない模様。eval ‘ssh-agent’と打つ。evalはシェルを実行

vagrant@precise64:~$ eval ‘ssh-agent’
SSH_AUTH_SOCK=/tmp/ssh-GxTXywae1697/agent.1697; export SSH_AUTH_SOCK;
SSH_AGENT_PID=1698; export SSH_AGENT_PID;
echo Agent pid 1698;

ssh-agent: 必要な時に秘密鍵を渡してくれる

再度、ssh-add -lと打つ

vagrant@precise64:~$ ssh-add -l
Could not open a connection to your authentication agent.

なにいいいいいいいいいいいいいいいいい

eval `ssh-agent -s`とする

vagrant@precise64:~$ eval `ssh-agent -s`
Agent pid 1708
vagrant@precise64:~$ ssh-add -l
The agent has no identities.

ひゃほおおおおおおおおおお

Linuxのssh-add コマンドとは何か?

ssh-addって何?

ssh-add: 認証エージェントに秘密鍵(id_rsa)を登録すること。
引数なしで実行された場合、~/.ssh/id_rsaが追加される。
秘密鍵(id_rsa)を読み込んだ後、ssh-addはそれに対応する情報を、秘密鍵のファイル名にサフィックス-cert.pubを追加したファイルから読み込もうとする。

秘密鍵の登録状況の確認

ssh-add -l

秘密鍵の確認

ssh-add hoge/fuga

ssh-keygenとは

ssh-keygenコマンドとは何か?

ssh-keygenコマンドは、sshで利用する認証用の鍵を生成・管理・変換するコマンド
sshプロトコルバージョン1のRSA鍵、sshプロトコルバージョン2のRSA鍵、DSA鍵が生成できる。

sshプロトコルのバージョンには2つある。
sshバージョン1 特許を持つ数種の暗号化アルゴリズムを使用し、通信ストリームに侵入者のデータ挿入を認める脆弱性
sshバージョン2 Red Hat Enterprise Linuxのopen sshセットはsshバージョン2を使用 鍵交換アルゴリズムを改良しており、バージョン2が推奨されている
RSA暗号とは 桁数が大きい合成数の素因数分解問題が困難であることを安全性の根拠とした公開鍵暗号の一つ
公開鍵:平文に暗号をかけるための鍵
秘密鍵:暗号文を元の平文に戻す為の鍵

ssh-keygenでは、公開鍵、暗号鍵両方つくる。

公開鍵認証の仕組み
事前にローカル側で作成した公開鍵を、ログイン先のサーバーに登録する。登録された公開鍵に対応した秘密鍵を持っているローカルから接続ができる。

実際に作ってみましょう
>ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\user/.ssh/id_rsa.
Your public key has been saved in C:\Users\user/.ssh/id_rsa.pub.
The key fingerprint is:
hogehoge user@DESKTOP-7QL099V
The key’s randomart image is:
+—[RSA 2048]—-+
|B*oo. |
|E*.o. |
|%.* .+ |
|**.o=.o |
| ooo.= S |
| =.o.. |
| o.*.* . |
| ..o *.+ |
| .. o. .. |
+—-[SHA256]—–+

.sshにid_rsa(秘密鍵:暗号文を元の平文に戻す為の鍵)、id_rsa.pub(公開鍵:平文に暗号をかけるための鍵)ができている。
公開鍵認証による接続は、このid_rsa.pub(公開鍵)をリモート先に置いて、id_rsa(秘密鍵)で開けてログインする。

リモート先の「~/.ssh/authorized_keys」に公開鍵を登録する
vagrantの場合だと、/home/vagrant 配下の/.ssh/authorized_keysが既に生成されている。

公開鍵の中身(authorized_keys/p)を見てみる
vagrantのauthorized_keys

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCwr/w9xN1wmHFNM3VCcf9wH9LRSLWxrE1tuQTRjp2VO//dmwwJZShapE+1/ylGt8QGnZSBNQqVPa/mOy9AZ47xOvnT9OXoKVinM3hASv02g+DsV5pUWujW6ToGXiW3CRtGvmDRMDpCs4ENBpxO82C3f7SavaqIiM3Wkrl5hYDJL0JkLKq8kcrDmDDAt3s1ZdkMt1255rXEGhDkHetdHFBw4ue7swumJ423tZShHRRQxzKEbUw44nBAvBAehogehoge vagrant

ssh-keygen -t rsaで作成した公開鍵(github_rsa.pub)

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDRvyk/aNTrWKq/U5h7B2gA2dSmrsy7ngAgatv0PPq15XYR7oxFtlJQ8rqhbI9yA7P3zzE1d6SQGsWi/RXYTI/4hGhm6gmItBmOs4YKFdwTH0FqMtIZQ7UwJ/I5bY7tt+SWAJJhg3hQuVAPtzU80PJhDEiw1SY/ZxIfTMdfDqIb6fIIB/yZxZycMno9wBQlE9lgPRGqCr7dENH80Ua99QTb+VLy9AF6XbYQHRdH+KZ4drFOFWTVyzDoGZiazpmguBZdmpxyhogehoge user@DESKTOP-hogehoge

基本的に一緒だ!最後のvagrant, user@DESKTOP-hogehogeがusernameかな?

chmod 600 ~/.ssh/authorized_keys で、パーミッションを追加

やべー、公開鍵認証を理解した俺、かっけー

vagrantのnetworking: ポートフォワーディング

host machineへのアクセスへのオプションです。
まず、公式ドキュメントを見ましょう。
Vagrant Networking

Prot Forwarding:ポートフォワーディング
ポートフォワーディング:インターネットから特定のポート番号宛てに届いたパケットを、あらかじめ設定しておいたLAN側の機器に転送する機能

現状
localのvagrant rootディレクトリにファイルを置きます。

ブラウザでipをたたくと、jpegが反映されています。

port forwardingを追加

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise64"
  config.vm.provision :shell, path: "bootstrap.sh"
  config.vm.network "private_network", ip: "192.168.33.10"
  config.vm.network :forwarded_port, guest:80, host: 4567
end

vagrant reload
http://127.0.0.1:4567/test.jpeg でたたく

上手くいってるっぽいです。
大体vagrantの基礎はこの辺で良いかな~

vagrantでprovisioning

provisioningとはリソースを提供できるように配置すること。
公式:Provisioning

あれ、若干初心者の域を超えてきてるか?全然意識してなかったが。。

まず、shell scriptを作ります。
bootstrap.shとします。

shellを書く

#!/usr/bin/env bash

apt-get update
apt-get install -y apache2
if ! [ -L /var/www ]; then
	rm -rf /var/www
	ln -fs /vagrant /var/www
fi

apt-get -> linuxでパッケージをインストール/アップデートする
-y -> yesを省略
-L -> ファイルがありシンボリックであれば真
-r -> ファイルがあり読み取り可能であれば真
-f -> ファイルがあり通常のファイルであれば真
-s -> ファイルがありサイズが0より大きければ真
ln -> link

vagrant fileでshellを読み込み
config.vm.provisionで shellを追記します。

  config.vm.box = "hashicorp/precise64"
  config.vm.provision :shell, path: "bootstrap.sh"

>vagrant reload
>vagrant ssh
>wget -qO- 127.0.0.1

あれ、なんか上手くいってない。。ああああああああああああああああああああああああ
provisonを実行するには、vagrant provisionだ

>vagrant provision
>vagran ssh
vagrant@precise64:~$ wget -qO- 127.0.0.1


 
  Index of /
 
 

Index of /

[ICO]NameLast modifiedSizeDescription

[   ]Vagrantfile15-Dec-2018 23:53 3.1K 
[TXT]bootstrap.sh16-Dec-2018 00:06 152  
[   ]foo15-Dec-2018 13:40 0  

Apache/2.2.22 (Ubuntu) Server at 127.0.0.1 Port 80
vagrant@precise64:~$

きたーーーーーーーーーーーーーーーーーーーー

vagrantでSynced Folder(共有フォルダ)の設定

Synced Foldersの意味がわかりませんでしたが、どうやら、共有フォルダのようです。
例に習って公式ドキュメントを見てみましょう。
Synced Folders

By using synced folders, Vagrant will automatically sync your files to and from the guest machine.
ローカルのフォルダとvmで共有できるそうだ!

え、何だって?

共有って凄くない!?

By default, Vagrant shares your project directory (remember, that is the one with the Vagrantfile) to the /vagrant directory in your guest machine.
ん?ローカルのvagrant upしたディレクトリと、home/vagrantが一緒?

vagrant@precise64:/home$ ls
vagrant
vagrant@precise64:/home$ cd vagrant
vagrant@precise64:~$ ls
postinstall.sh

postinstall.sh しかないよ。

vagrant@precise64:~$ ls /vagrant
Vagrantfile

topに戻ります。

vagrant@precise64:/$ ls
bin   etc         lib         media  proc  sbin     sys  vagrant
boot  home        lib64       mnt    root  selinux  tmp  var
dev   initrd.img  lost+found  opt    run   srv      usr  vmlinuz
vagrant@precise64:/$ cd vagrant
vagrant@precise64:/vagrant$ ls
Vagrantfile

ああああああああ、なるほど! vagrantフォルダと共有されてる!!!!!!!!!!!!!!

vagrant@precise64:/vagrant$ touch foo
vagrant@precise64:/vagrant$ ls
foo  Vagrantfile


これはすげー ビビった。

vagrant upとvagrant ssh

vagrant のbootの方法

$ vagrant up

sshでコマンドラインから接続できる。

>vagrant ssh
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
New release '14.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Welcome to your Vagrant-built virtual machine.
Last login: Sat Dec 15 07:15:13 2018 from 192.168.33.1

exitでログアウトします。

vagrant@precise64:~$ exit
logout
Connection to 127.0.0.1 closed.

ほーーーーーーーーー

vagrantのboxを追加、作成する方法: 公式サイトより

vagrant公式サイトより、vagrant boxの追加、作成方法を見てみましょう。
vagrant boxes.html

Vagrant uses a base image to quickly clone a virtual machine.
スクラッチからつくるのは面倒なので、cloneすると書いてます。賢いというか、エンジニアっぽい発想ですね。

hashi corpのbox search
https://app.vagrantup.com/boxes/search

ubunt/trusty64, centos7などありますねー

あれ、ちょっと待て、

Laravel すげーダウンロードされてんじゃん、マジかよ。。ショック。誰だ、このdeveloperっぽいアイコンは??

基本的に、boxからdownloadする。dockerのimageみたいな感じだな。

boxはusernameとboxからなる
hashicorp/precise64 だと、hashicorpがusernameでprecise64がbox
laravel/homestead はlaravelがusernameでhomesteadがbox なるほどにゃー

boxの使い方
vagrant fileのコメントアウトを取ると以下のようになりますね。

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise64"
end

versionを指定する場合
box_versionを書く

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise64"
  config.vm.box_version = "1.1.0"
end

インストールするURLを指定する場合
vm.box_urlを書く

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise64"
  config.vm.box_url = "https://vagrantcloud.com/hashicorp/precise64"
end

box catalogにあれば、インストールできる。
うーん、しかし、点と点が線になる瞬間はちょっとびっくりしますな。