聞いたことはあるけどよく知らないMyBatisにちょっと近づいてみる

http://www.mybatis.org/images/mybatis-logo.png

MyBatisは、O/Rマッパーです。

O/Rマッパーっていうのはオブジェクト指向のプログラムとリレーショナルデータベースをつなげてくれます。

O/RマッパーはObject/Relationalマッパーの略で、オブジェクト指向のプログラムと、RDBをライブラリで橋渡ししようという考え方です。
cfm-art.sakura.ne.jp

https://thinkit.co.jp/images/article/0606/13/1/2.gif
thinkit.co.jp

ということでMyBatisは、リレーショナルデータベースとJavaプログラムを手軽につなげてくれるフレームワークです。

MyBatis はカスタム SQL、ストアドプロシージャ、高度なマッピング処理に対応した優れた永続化フレームワークです。 MyBatisを使うことで、直接 JDBC を扱うコードを書いたり、クエリ引数やクエリ結果を手動で設定する必要がほとんどなくなります。 MyBatis の設定やデータベースレコードと Java オブジェクトの関連付けは、XML またはアノテーションを使って行うことができます。
MyBatis – MyBatis 3 | イントロダクション

JDBCは、リレーショナルデータベースにアクセスするための標準Java APIです。

Java Database Connectivityの省略という噂はありますがホントの名称はわからないっぽいです。
JDBCを使って「データベースへの接続」「SQLの実行」「データベースからの結果取得」ができます。

http://image.itmedia.co.jp/ait/articles/0106/26/r5fig1.gif
http://image.itmedia.co.jp/ait/articles/0106/26/r5fig3.gif
JDBCとは何か?:Javaデータアクセスの基礎(1) - @IT

http://www.atmarkit.co.jp/fjava/javafaq/jdbc/jdbc1.gif
Java Solution FAQ:JDBCとは何でしょうか?

このJDBCを直接使うよりもMyBatisをJDBCの手前に置いて使うほうがカンタンにデータベースとプログラムをつなげることができます。

https://terasolunaorg.github.io/guideline/5.1.0.RELEASE/ja/_images/DataAccessMyBatis3Scope.png
5.2. データベースアクセス(MyBatis3編) — TERASOLUNA Server Framework for Java (5.x) Development Guideline 5.1.0.RELEASE documentation

設定やSQLXMLに書けばMyBatisが頑張ってくれます。

XML 形式の設定ファイルを使って SqlSessionFactory を生成する
XML 形式の設定ファイルには、MyBatis システムの基本設定が含まれます。 例えば、データベースから Connection のインスタンスを取得する DataSource や、トランザクションの制御方法を決定する TransactionManager などです。
XML 形式の設定ファイルの詳細については後ほど改めて説明しますが、ここでは簡単なサンプルを挙げておきます。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>

Mapped SQL Statements について
以下は、先ほどの例で SqlSession のメソッドを呼び出したときに実行されることを想定した XML ベースの Mapped Statement です。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper">
  <select id="selectBlog" resultType="Blog">
    select * from Blog where id = #{id}
  </select>
</mapper>

BloggerMapper のような Mapper クラスなら、実は XML を使う必要はありません。 代わりに、Java アノテーションを使って下記のように Mapped Statement を記述することができます。

public interface BlogMapper {
  @Select("SELECT * FROM blog WHERE id = #{id}")
  Blog selectBlog(int id);
}

MyBatis – MyBatis 3 | スタートガイド

https://terasolunaorg.github.io/guideline/5.1.0.RELEASE/ja/_images/DataAccessMyBatis3RelationshipOfComponents.png
https://terasolunaorg.github.io/guideline/5.1.0.RELEASE/ja/_images/DataAccessMyBatisSpringRelationshipOfComponents.png
5.2. データベースアクセス(MyBatis3編) — TERASOLUNA Server Framework for Java (5.x) Development Guideline 5.1.0.RELEASE documentation

クライアントサーバの3階層システムの基本

3階層システムとは

別名 : 3層システム / 3層クライアントサーバシステム / 3階層アーキテクチャ / 3-tier system

クライアントサーバシステムを

  1. プレゼンテーション層(ユーザインターフェース部分)
  2. アプリケーション層(ビジネスロジック部分)
  3. データ・アクセス層(データベース部分)

の3層に分割して構築したシステム。
クライアントおよびサーバの処理を複数の階層に分離して配置することで、ある階層へ変更を加える必要が生じた際にも柔軟に対応できるようなっている。
3階層システムでは、クライアント側にはユーザインターフェース部分のみを残し、あとはサーバ側に実装する。クライアントはユーザからの操作を受け付け、アプリケーション層からの処理結果を表示することのみを行う。
https://blog-001.west.edge.storage-yahoo.jp/res/blog-fc-69/u_mana80/folder/543809/32/12949932/img_2_m?1431576314

アプリケーション部分をクライアントから分離してサーバに実装することにより、ビジネスロジックが変更された場合でもサーバ側のアプリケーションを変更するだけでよく、変更がシステム全体に及ぶことは無い。また、大量のデータを扱うシステムでは、ネットワークを通じてクライアントとサーバの間で大量のデータのやり取りをする必要が無くなる。
https://blog-001.west.edge.storage-yahoo.jp/res/blog-fc-69/u_mana80/folder/543809/32/12949932/img_3_m?1431576314

各層の役割

プレゼンテーション層(ユーザインターフェース層 / UI層)

  • ユーザーに情報を表示したり、ユーザーからの入力を受け付けたりする機能を担当するレイヤ
  • 細かな変更や拡張が発生しやすい
  • 使い勝手を向上させるためのインターフェイスの改善
  • 新デバイス対応など(PDAや携帯電話対応など)

などなど
プログラムは、ユーザー・インターフェイスの実装なので、ほかの層に比較すれば、実装やテストにかかるコストはそれほど大きくない

https://blog-001.west.edge.storage-yahoo.jp/res/blog-fc-69/u_mana80/folder/543809/32/12949932/img_0_m?1431576314

アプリケーション層(ビジネス・ロジック層 / ファンクション層)

  • アプリケーションの実際の情報処理を担当するレイヤ
  • 業務フローや各種データ処理など、ビジネスで必要な情報処理をソフトウェアとして実装するレイヤ
  • 本質的な部分は比較的長期にわたって変わりにくい
    • ビジネスの処理そのものをプログラムとして表現したもの
  • ユーザー認証やトランザクション処理など、プログラム実装やテストには多大な工数が必要になることが多い

https://blog-001.west.edge.storage-yahoo.jp/res/blog-fc-69/u_mana80/folder/543809/32/12949932/img_1_m?1431576314

データ層

  • データベース・システムへのアクセス・保存機能を組み込むレイヤ
  • データベースの構造を変更することはそれほどない
    • 本質的なデータ構造自体は何十年も変わらず使い続けられるというケースも少なくない
    • ただ・・・
      • あらかじめ業務分析をきちんと実施してデータ構造を決定しておく必要はある
      • アクセス効率や可用性、セキュリティ性能向上など、運用面からデータベース構造の見直しが発生することはある
  • 利用するデータベース・システム(例えばSQL Serverか、Oracleかなど)によって内容が大きく影響を受ける
    • 逆に考えると・・・
      • データ層を独立させることで、データベース・システムの違いから、ビジネス・ロジック層を分離できるというメリットがある

https://blog-001.west.edge.storage-yahoo.jp/res/blog-fc-69/u_mana80/folder/543809/32/12949932/img_5_m?1431576314

https://blog-001.west.edge.storage-yahoo.jp/res/blog-fc-69/u_mana80/folder/543809/32/12949932/img_7_m?1431576314

3層構造はMVCと一緒のものでしょうか?

層構造をお勉強していて思った、「MVCモデルと似てない?」「一緒?」

  • プレゼンテーション層 - View
  • アプリケーション層 - Controll
  • データ層 - Model

な感じ?
「3層構造」「MVC」なんかでググるとすぐにわかります。それは間違いです。

違い : 3層構造は直線でつながる

MVCは三角でつながる -> プレゼンテーション層とデータ層はつながらないが、ViewとModelはつながる

違い : 表しているものが違う

という訳で違う、その違うものを対応させようとしたのがおかしいという結果です。

NetBeansにGlassFishを設定する方法

NetBeansをインストールしたのでGlassFishを設定します。
ponsuke-tarou.hatenablog.com

GlassFishをインストールします

qiita.com

NetBeansGlassFishを設定します

  1. f:id:ponsuke_tarou:20171115224411p:plain
  2. f:id:ponsuke_tarou:20171120223311p:plain
  3. GlassFishをインストールした場所を指定します。
  4. f:id:ponsuke_tarou:20171115224605p:plain
  5. f:id:ponsuke_tarou:20171115224642p:plain

GlassFishが設定できました。

f:id:ponsuke_tarou:20171115224728p:plain

GlassFishを起動してみます。

  1. [Service]タブ > [Server] > [GlassFish(追加した時に設定したName)] > [Start]f:id:ponsuke_tarou:20171120223411p:plain
  2. 動きました。
  3. f:id:ponsuke_tarou:20171120223514p:plain

MacにNetBeansをインストールする方法

dmgをダウンロードします

  1. NetBeansのサイトをブラウザで表示します。
  2. 言語とOSを選択します。f:id:ponsuke_tarou:20171115222238p:plain
  3. .dmgをダウンロードします。
  4. f:id:ponsuke_tarou:20171115221646p:plain

NetBeansをインストールします

  1. NetBeans8.2.pkgを押下します。
  2. f:id:ponsuke_tarou:20171115221754p:plain
  3. [Continue]ボタンを押下して進みます。
  4. f:id:ponsuke_tarou:20171115221835p:plain
  5. f:id:ponsuke_tarou:20171115221840p:plainf:id:ponsuke_tarou:20171115221854p:plain
  6. ライセンスの説明を読んで[Agree]を押下します。
  7. f:id:ponsuke_tarou:20171115221936p:plain
  8. [Install]を押下します。
  9. f:id:ponsuke_tarou:20171115222210p:plain
  10. f:id:ponsuke_tarou:20171115222230p:plain
  11. 使い終わったものはゴミ箱へ。f:id:ponsuke_tarou:20171115222435p:plain

NetBeansを起動します

  1. f:id:ponsuke_tarou:20171115222636p:plain
  2. f:id:ponsuke_tarou:20171115222720p:plain

次はNetBeansGlassFishを設定します

ponsuke-tarou.hatenablog.com

Tera TermでRAS鍵を作ってWindowsからCentOS7へ接続できるようにする

CentOS7にWindows10(ネットワーク内のPC)からもPuttyでログインできるようにしたので、TeraTermでログインできるようにします。
ponsuke-tarou.hatenablog.com

  • 目的 : Linux環境でSSHの鍵作成から設定まで勉強したい!
  • 環境
    • ホストOS : macOS Sierra Version10.12.6
    • VirtualBox : 5.1.26 r117224 (Qt5.6.2)
    • ネットワーク内のPC : Windows10 64bit
      • Tera Term : Version 4.96

Tera Termで公開鍵と秘密鍵を作成します。

Tera Termをインストールして鍵を作ります。

qiita.com

秘密鍵のフォーマットを見てみます。

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,7C930B26ED8CEE374948185658236DAC

3mhBszzfw+uMRFWQIX4FK0TGsnrjHxnhRFVZDzDuPozcuCeh9mWU8HaSYP4TEcwM
5KNPU5lyQehA5QlhGF0DSnSjvMzGUjtkJTdtehKtUi9Gdgpe7QY0WM3IxZbcRQwi
zYduHjRp9ew07bbQ2rWZ8lY16Du+k0GyZcJzoyZLTKN0R/rCnttbOjKcSEQYTJeq
fPf6dgtfugA6gR2+sfdVY14QDRLvDIlkykvgCx7rtv96gaVBXA6g76ml4GHQTG4s
6M9ujC8xtY3YIzQc9TCrJ8QK9KEGZ66PmWTnpkXBFX/9SJWweauka1VmNwq1I2cN
6M/YJnVumg3yXDqVryI4Oqw+GlreyARaxXSvyhzXgT1G7penPFUkFZixNW5SMtbv
LL71sO4aDfF4NIK3I2Xu85id7f1RSacHNzhDRrhOhmTpkpIujQaMmOtzDgylJTfR
c6QjXbsoMNLkcHxchCqWoFQ/PR4XJdxMofckrZ4RNSZOYT2j65ukgm835Q6ueC83
bRp0GxgZGbyn3HXe1VCpPfVVToOliTiUAnHOKKO5bozNKZ+rKff3I14LFeIYVOOC
OmwUaAAX8soonxsk6jj34+PuXLe7TCPduRwBy8iCLUnq+MCOmPn07S4xi18sJB2K
KHawK0WD+aOKQCbTHayGvx7e+h5Zz5/2ZWFU4OOBGxnkPO2escJPVvnk+wB8jw2d
UjSTCC3YLG1OkpP/aNwgeEDhr75G0OCzW7P5byxlhIRukt/Z0h+HPcDrKxJpzz9H
KciO2Rz6O7E2xEvAAxOB6r5ljwSzELdWWy9NScCt3s9RpPdjwPYgjmgp/QNf2kzc
s1cMeoim0EodCikkWlToK6bbPqfwMObSNMVkell++G4G1G7yyZBFq8iN/aY4s4H6
ANAyvNH63oY1A58onbbz3Qa6UvjwwyQIZk1mivimZ5QJ/n3UtFalNHa+0YrBNv+I
+wmQBAg+jQXivHi881raj3eck1ASQqrtftpkLuMKJRMo7QvGYe+UfcbbCPyr2TbH
CCnPu5oUeTf3bpn1ai4pD3KImNBSykeNRisjDihbmcbxtR+dp2b7CrZ7T0+QuTUE
murML94QvzuS/CQL65mXePxjDrf27gNw+Ij/tyURTYGBd6TEEQYOyfBE5m32vygI
jY5wd4h+CGMqvFaTMZBuECmjK8b6dCPqGG4bLhGRoI0vdCE2PcEOicKwNvjiNpQ4
P91X+rQTQuQdIbOu3u+IwRI+eIsLE10xrvhz5pyUeoVG5/A94XbMRQLSAttvsFPm
EX7NDwItVX/H2FYoee1mfF/EL7sEPGEp5YVDB2MQ4rCJEcwPfSgSnwDVk5cXRi/p
038FTkfWb1U7c7JIglV4/d0+gaocbRfozjKo8ZIVyP1oBVomwh+PJ3v/Jq1v1Noq
IQfCAOhPEdrabEvbSCdxsv48jixfS0ZU05T1E/YtiuEPZ3LwHrYjGjY51ao15Z+e
GZcMB11QGMJitD26x7MnJ4PX5g9JVxNdJi5TQ2sh+LlZWo3AGsEhfeul8O8aTKZH
aVcgU+OwvzNXPmJaNseiT2nrS7oVUH4m6Tt8/xlEpJRVH104np/ftRWiESHAUvR0
-----END RSA PRIVATE KEY-----

公開鍵のフォーマットを見てみます。

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAnpGby/8AS8d22UX5SR0t89ijvFQ6Yp/A1eTcIbpwk/SuiSonmXY53jCAZ/3//teGNAfHxwPOklaGqwwlQR/GNdl+6uba7nFoXCUiuwoBSPHRbT1aiNWHEwt/IF7zyFmid/AxZzi3FMbTIMF+Ga9iT+NrgMsguo+PEPhFbwUXHA7Udqh23cioPHd5Al/klkonW+iBQBC4zn4/IvpdUGj3li1YwDcZSHj/uR3t7d5MaBA4LzefV83v/mx1SsSonU6YIDitEwzF4vVtb52a+0x4FuYwNSfybsDIXfmIpvQc2h0Sl1oBxZEdcUkVQAufebw9i5a8p4+sCWM4gZq7xQaEUw== m-uki@DESKTOP-KM1J7OI

qiita.com

CentOSに公開鍵を配置します。

Tera Term接続用のユーザを作ります。

# rootでログインします。
$ ssh root@192.168.0.6
root@192.168.0.6s password:
Last login: Wed Oct 25 01:20:50 2017 from 192.168.0.4

# ユーザを作ります。
$ useradd chovin

# パスワードを設定します。
$ passwd chovin
ユーザー chovin のパスワードを変更。
新しいパスワード: #<------------------------ パスワードの文字数が少いと怒られますが、このまま行きます。
よくないパスワード: このパスワードは 8 未満の文字列です。
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。

# 作ったユーザを確認します。
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
<省略>
mana:x:1000:1000:mana:/home/mana:/bin/bash
ponsuke:x:1001:1001::/home/ponsuke:/bin/bash
vboxadd:x:996:1::/var/run/vboxadd:/bin/false
chovin:x:1002:1002::/home/chovin:/bin/bash

CentOSに接続するためにTera Termを設定します。

  1. Tera Termを起動します。
  2. [ホスト]にCentOSIPアドレスを設定します。
  3. [OK]ボタンを押下します。f:id:ponsuke_tarou:20171101213358j:plain
  4. [続行]ボタンを押下します。f:id:ponsuke_tarou:20171101213404j:plain
  5. ユーザ名とパスワードを入力して[OK]ボタンを押下します。f:id:ponsuke_tarou:20171101214521j:plain

CentOSで公開鍵を配置する準備をします。

# rootでログインします。
$ ssh root@192.168.0.6
root@192.168.0.6s password:
Last login: Wed Nov  1 21:15:19 2017 from 192.168.0.7

# 公開鍵を配置用ディレクトリを作成します。
$ mkdir /home/chovin/.ssh

# ディレクトリと中身の所有者を変更します。
$ chmod 700 /home/chovin/.ssh/
$ chown -R chovin:chovin /home/chovin/.ssh/

# 権限を確認します。
$ ls -la /home/chovin/
合計 12
drwx------. 3 chovin chovin  74 111 21:17 .
drwxr-xr-x. 5 root   root    47 111 21:15 ..
-rw-r--r--. 1 chovin chovin  18  97 01:25 .bash_logout
-rw-r--r--. 1 chovin chovin 193  97 01:25 .bash_profile
-rw-r--r--. 1 chovin chovin 231  97 01:25 .bashrc
drwx------. 2 chovin chovin   6 111 21:17 .ssh

# ログアウトします。
$ logout
Connection to 192.168.0.6 closed.

公開鍵を配置します。

  1. Tera Termを起動して作ったユーザでCentOS7に接続します。
  2. 公開鍵をTera Termのウィンドウにドラッグ&ドロップします。
  3. 配置先を指定して[SCP]ボタンを押下します。f:id:ponsuke_tarou:20171101214524j:plain
# 配置した公開鍵を確認します。
$ ls -la ./.ssh/
合計 4
drwx------. 2 chovin chovin  52 111 22:27 .
drwx------. 3 chovin chovin  95 111 21:27 ..
-rw-r--r--. 1 chovin chovin 403 1031 23:42 CentOS7inMacCreatedTeraTerm_id_rsa.pub

# 公開鍵をリネームします。
$ mv ./.ssh/CentOS7inMacCreatedTeraTerm_id_rsa.pub ./.ssh/authorized_keys

# 確認します。
$ ls -la ./.ssh/
合計 4
drwx------. 2 chovin chovin  29 111 22:33 .
drwx------. 3 chovin chovin  95 111 21:27 ..
-rw-r--r--. 1 chovin chovin 403 1031 23:42 authorized_keys

# ログアウトします。
$ logout

WindowsからCentOS7へTera Termを使ってRAS鍵認証で接続します。

  1. Tera Termを起動します。
  2. [キャンセル]ボタンを押下してダイアログを閉じます。f:id:ponsuke_tarou:20171101223824j:plain
  3. [設定] > [SSH認証]を選択します。f:id:ponsuke_tarou:20171101223827j:plain
  4. ユーザ名と秘密鍵の場所を設定して[OK]ボタンを押下します。f:id:ponsuke_tarou:20171101223835j:plain
  5. [ファイル] > [新しい接続]を選択してCentOS7へ接続します。f:id:ponsuke_tarou:20171101223840j:plain
  6. パスフレーズを入力して[OK]ボタンを押下します。f:id:ponsuke_tarou:20171101225512j:plain
# 接続できました。
Last login: Wed Nov  1 22:27:04 2017 from 192.168.0.7
$ pwd
/home/chovin

PuttygenでRAS鍵を作ってWindowsからCentOS7へ接続できるようにする

VirtualBoxに作ったCentOS(ゲストOS)にMac(ホストOS)からRAS鍵認証でログインできるようにしたので、Windows(ネットワーク内のPC)からもRAS鍵認証でログインできるようにします。
ponsuke-tarou.hatenablog.com

  • 目的 : Linux環境でSSHの鍵作成から設定まで勉強したい!
  • 環境
    • ホストOS : macOS Sierra Version10.12.6
    • VirtualBox : 5.1.26 r117224 (Qt5.6.2)
    • ネットワーク内のPC : Windows10 64bit
      • Putty : Release 0.70
      • PuTTYgen : Release 0.70

Puttygenで公開鍵と秘密鍵を作成します。

Puttyをインストールします。

qiita.com

Puttygenで鍵を作成します。

  1. Pttuyに同梱されているPuttygenを起動します。
  2. [Parameters] > [Type of key to generate] で「RSA」を選択します。
  3. [Number of bits in generated key:]で鍵の強度を選択します。
  4. [Generate]ボタンを押下します。f:id:ponsuke_tarou:20171029234034j:plain
  5. スペースの部分でマウスをぐるぐるします。f:id:ponsuke_tarou:20171029234114j:plain
  6. 鍵が作成されます。f:id:ponsuke_tarou:20171029234157j:plain
  7. パスフレーズ*1を設定します。f:id:ponsuke_tarou:20171029234405j:plain
  8. [Save public key]ボタンを押下して公開鍵を任意の場所に保存します。
  9. [Save private key]ボタンを押下して秘密鍵を任意の場所に保存します。

秘密鍵のフォーマットを見てみます。

PuTTY-User-Key-File-2: ssh-rsa
Encryption: aes256-cbc
Comment: rsa-key-20171029
Public-Lines: 6
AAAAB3NzaC1yc2EAAAABJQAAAQEAxAEme5H2xppEXco7GFXkThnD7Fg+NDmeFbD6
bk3FleItQr7g7jlCrk8Rlg5T280g8d1o/Qp7Y3SLoOJHd0Vi/I0MtITJpqnW4sKQ
wPvLSrq3bgDe5wXAzNwh78sy8U4KqOLlJPHvLmCZ1tJE89KNMH4q145/ReyJZwAP
3U8t5RM5XSg1oByDPW7FL9TifABB4ZToRGx6Fmsfyb0r+wMjN3Ui0zNTcWFHDjw+
UcoAlqjBWIpZGqju3ZztdJuHZ8Ed2EMrxmjJkqh6yfu1ek5yPMdSLlPC/autU/JF
YR12HGmkBGI/QB8V0YPWHdzP3y2KaSeeJ9sowB9dzc8Iaw1JUw==
Private-Lines: 14
itvpHd9uLhrzfNbOwAsOiFjVUDQwJT8xwoN++LvwWzJd0s/X2ZyBHWGtgfFZbwTR
a8b0cQ1Vd5ZcZmhnz09TPHGNjeELnJ0BNa7H+DDyHCBFuKyxvpb49v3brKp9HJBp
JT/rCFMTJqMX02OpA5pKA4SbOThA/PMnLgRWXrryg8/pOXRdQ2ecVJeWlU+r8cJB
hpR/2LkP4jTykNY9MR9pYD+nDGEsND8Q6hGTmnj8TgOYp3Mmy2uVXhGvbxdGdsGH
iQxHR/jGwMseFZ+sZyM0URr/RvWTVexhBF72LQqWOhyweellHPoHrLpo2zFX+SvK
lMjQHc3pVggSxD4WG7qtsKnu+H0WIUeaM0JjW+XJm4AXP8/zes8HTZr43VvaSbHz
y3LseqFFlOliko3Iin/fyR08YkU+B+qPHKVmWjrHtV91PQHNhU1y83FWRHI0O+Gs
1ugjS3ZdTp3QpzOS+0zIpPBTU4zw+QjXMePgTrOAe1ZuS6z7Vlz7xAZ04upSoVUj
XX8RyESYgGStqBy6cruoLkuCa+zDpXrnfb3FeYnHU+9kE5YRftmzdrnKKSSMzAtq
twofymiMZ04Soqf/Zmvekspj7FiYQTj4QVpHKjKWeZMszv5zTsbG2DZ5kzK4JOv8
DOlyNqEQi/whps2qkLZlQKTubIAewj3bKfk4nXB4TlrAJZqY/CdddW0yi6jOC90s
TvURd2R3sDCvGkM98zKPHi7FQ415Ei7mBkYC1VfZQxezx2AvH1x6PdEHidjNxiZa
2MTdlTEmzXX1/yxZuq0S/vRuTv4lK4HdnhiGeC35YUOrMSoBpcD5MiffroQF7Ie6
kGgnoWs210bRwNKAP9QEvNTWR91HotDCEgQim1JpqvPY8xd3C9yluGKut/pOWFL0
Private-MAC: 811871db936602fd5c01593aa7273dcc79eab6e2

公開鍵の中身を見てみます。

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20171029"
AAAAB3NzaC1yc2EAAAABJQAAAQEAxAEme5H2xppEXco7GFXkThnD7Fg+NDmeFbD6
bk3FleItQr7g7jlCrk8Rlg5T280g8d1o/Qp7Y3SLoOJHd0Vi/I0MtITJpqnW4sKQ
wPvLSrq3bgDe5wXAzNwh78sy8U4KqOLlJPHvLmCZ1tJE89KNMH4q145/ReyJZwAP
3U8t5RM5XSg1oByDPW7FL9TifABB4ZToRGx6Fmsfyb0r+wMjN3Ui0zNTcWFHDjw+
UcoAlqjBWIpZGqju3ZztdJuHZ8Ed2EMrxmjJkqh6yfu1ek5yPMdSLlPC/autU/JF
YR12HGmkBGI/QB8V0YPWHdzP3y2KaSeeJ9sowB9dzc8Iaw1JUw==
---- END SSH2 PUBLIC KEY ----

qiita.com

CentOS7に公開鍵を配置します。

CentOS7に接続するためにPuttyを設定します。

  1. Puttyを起動します。
  2. [Host Name(or IP address)]にCentOSIPアドレスを設定します。
  3. [Port]に「22」を設定します。f:id:ponsuke_tarou:20171030224609j:plain
  4. [Saved Sessions]に自分に分かる名前を設定します。
  5. [Connection] > [Data] > [Auto-login username]にユーザ名を設定します。f:id:ponsuke_tarou:20171030224613j:plain
  6. [Session] > [Save]ボタンを押下して設定を保存します。f:id:ponsuke_tarou:20171030224616j:plain
  7. [Open]ボタンを押下して接続します。
  8. 初回接続では鍵についてのメッセージが表示されるので[はい]で続けます。f:id:ponsuke_tarou:20171030224621j:plain

CentOS7で公開鍵を配置する準備をします。

# CentOS7にログインします。
$ ponsuke@192.168.0.6
Using username "ponsuke".
ponsuke@192.168.0.6s password: #<------------ まだこの時点では普通のパスワードでログインします。

# 公開鍵を配置用ディレクトリを作成します。
$ mkdir /home/ponsuke/.ssh
$ ls -la
合計 12
drwx------. 3 ponsuke ponsuke  74 1030 22:24 .
drwxr-xr-x. 4 root    root     33  68 21:27 ..
-rw-r--r--. 1 ponsuke ponsuke  18  83  2016 .bash_logout
-rw-r--r--. 1 ponsuke ponsuke 193  83  2016 .bash_profile
-rw-r--r--. 1 ponsuke ponsuke 231  83  2016 .bashrc
drwxrwxr-x. 2 ponsuke ponsuke   6 1030 22:24 .ssh

# ディレクトリと中身の所有者を変更します。
$ chown -R ponsuke:ponsuke /home/ponsuke/.ssh/

# 権限を確認します。
$ ls -la
合計 12
drwx------. 3 ponsuke ponsuke  74 1030 22:24 .
drwxr-xr-x. 4 root    root     33  68 21:27 ..
-rw-r--r--. 1 ponsuke ponsuke  18  83  2016 .bash_logout
-rw-r--r--. 1 ponsuke ponsuke 193  83  2016 .bash_profile
-rw-r--r--. 1 ponsuke ponsuke 231  83  2016 .bashrc
drwxrwxr-x. 2 ponsuke ponsuke   6 1030 22:24 .ssh

# ログアウトします。
$logout

公開鍵を配置します。

# Puttyに同梱されているSCPツールを使います。
$ ls -la /c/app/putty/
total 3697
drwxr-xr-x 1 m-uki 197609      0 1030 22:04 ./
drwxr-xr-x 1 m-uki 197609      0 1030 22:35 ../
-rw-r--r-- 1 m-uki 197609   1338 74 19:31 LICENCE
-rwxr-xr-x 1 m-uki 197609 313912 74 19:34 pageant.exe*
-rwxr-xr-x 1 m-uki 197609 617048 74 19:34 plink.exe*
-rwxr-xr-x 1 m-uki 197609 626744 74 19:34 pscp.exe* #<------------------- これです。
-rwxr-xr-x 1 m-uki 197609 643144 74 19:34 psftp.exe*
-rw-r--r-- 1 m-uki 197609 283045 74 19:31 putty.chm
-rwxr-xr-x 1 m-uki 197609 854072 74 19:34 putty.exe*
-rwxr-xr-x 1 m-uki 197609 407104 74 19:35 puttygen.exe*
-rw-r--r-- 1 m-uki 197609   1893 74 19:30 README.txt
-rw-r--r-- 1 m-uki 197609    104 74 19:30 website.url

# SCPで公開鍵をWindowsからCentOS7へ配置します。
$ /c/app/putty/pscp.exe /c/app/Dropbox/key/CentOS7ofVirtualBoxInMac.pub ponsuke@192.168.0.6:.ssh/
ponsuke@192.168.0.6s password: #<------------ まだこの時点でも普通のパスワードです。

CentOS7ofVirtualBoxInMac. | 0 kB |   0.5 kB/s | ETA: 00:00:00 | 100%

# CentOS7にログインします(うっかりPuttyを使わずにログインしてしまいました)。
$ ssh ponsuke@192.168.0.6
The authenticity of host '192.168.0.6 (192.168.0.6)' cant be established.
ECDSA key fingerprint is SHA256:j+mhEbwrkV5GaVU8gat34VZs2A4+q4q8HaKjOg9m33I.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.6' (ECDSA) to the list of known hosts.
ponsuke@192.168.0.6s password: #<------------ まだこの時点でも普通のパスワードです。
Last login: Mon Oct 30 22:23:20 2017 from 192.168.0.7

# 配置した公開鍵を確認します。
$ ls -la .ssh/
合計 4
drwxrwxr-x. 2 ponsuke ponsuke  42 1030 22:34 .
drwx------. 3 ponsuke ponsuke  95 1030 22:27 ..
-rw-rw-r--. 1 ponsuke ponsuke 477 1030 22:34 CentOS7ofVirtualBoxInMac.pub

# 公開鍵をPuttygenの形式からLinuxで使えるOpen SSL形式に変換します。
$ ssh-keygen -i -f .ssh/CentOS7ofVirtualBoxInMac.pub > .ssh/authorized_keys

# Open SSL形式に変換した公開鍵の中身を見てみます。
$ cat .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAxAEme5H2xppEXco7GFXkThnD7Fg+NDmeFbD6bk3FleItQr7g7jlCrk8Rlg5T280g8d1o/Qp7Y3SLoOJHd0Vi/I0MtITJpqnW4sKQwPvLSrq3bgDe5wXAzNwh78sy8U4KqOLlJPHvLmCZ1tJE89KNMH4q145/ReyJZwAP3U8t5RM5XSg1oByDPW7FL9TifABB4ZToRGx6Fmsfyb0r+wMjN3Ui0zNTcWFHDjw+UcoAlqjBWIpZGqju3ZztdJuHZ8Ed2EMrxmjJkqh6yfu1ek5yPMdSLlPC/autU/JFYR12HGmkBGI/QB8V0YPWHdzP3y2KaSeeJ9sowB9dzc8Iaw1JUw==

# ログアウトします。
$ logout
Connection to 192.168.0.6 closed.

webkaru.net

puttyの公開鍵をOpenSSH形式に変換するmistymagich.wordpress.com

uxmilk.jp

WindowsからCentOSPuttyを使ってRAS鍵認証で接続します。

  1. Puttyを起動します。
  2. [Connection] > [SSH] > [Auth] > [Private key file for authentication:]に秘密鍵を設定します。f:id:ponsuke_tarou:20171030225342j:plain
  3. [Session] > [Save]ボタンを押下して設定を保存します。
  4. [Open]ボタンを押下して接続します。
Using username "ponsuke".
Server refused our key
ponsuke@192.168.0.6s password: #<---------------- 鍵作成時に設定したパスフレーズを使います。
Last login: Mon Oct 30 22:39:17 2017 from 192.168.0.7

# ログインできました。
$ pwd
/home/ponsuke

次は、TeraTermでログインできるようにします。
ponsuke-tarou.hatenablog.com

ssh-keygenでRAS鍵をつくってMacからCentOS7へ接続できるようにする

MacVirtualBoxに作ったCentOS(ゲストOS)にRSA鍵認証許可を設定したので、Mac(ホストOS)からRSA鍵認証でログインできるようにします。
ponsuke-tarou.hatenablog.com

  • 目的 : Linux環境でSSHの鍵作成から設定まで勉強したい!
  • 環境

Macで公開鍵と秘密鍵を作成する

鍵を作成する

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/mana/.ssh/id_rsa):   # <-------- 特に指定がなければEnter
Enter passphrase (empty for no passphrase):   # <--------------- パスフレーズを入力
Enter same passphrase again:  # <-------------- 確認用にもう1度パスフレーズを入力
Your identification has been saved in /Users/mana/.ssh/id_rsa.
Your public key has been saved in /Users/mana/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:+OKA8zTBRkOH7shmT36jxXelsEek9RnRI69Xy8RzzB8 mana@mananoMacBookAir.local
The keys randomart image is:
+---[RSA 2048]----+
|    ...     ..   |
|   ...      ..o  |
|   .o     o .o.+ |
|   o.. . + . o.E=|
| . o+ . S . +.o.*|
|  =ooo . + o. .o.|
| oo++ + + +  .   |
|   +o=oo o       |
|    oo..         |
+----[SHA256]-----+

$ ls -la .ssh/
total 24
drwx------   5 mana  staff   170 Aug  1 22:44 .
drwxr-xr-x+ 60 mana  staff  2040 Jul 26 23:24 ..
-rw-------   1 mana  staff  1766 Aug  1 22:44 id_rsa #<--------------- 秘密鍵
-rw-r--r--   1 mana  staff   409 Aug  1 22:44 id_rsa.pub #<------------ 公開鍵

# 公開鍵に所有者のみ読み書き権限を付与します。
$ chmod 600 .ssh/id_rsa.pub

# 権限を確認します。
$ ls -la .ssh/
total 24
drwx------   5 mana  staff   170 Aug  1 22:50 .
drwxr-xr-x+ 60 mana  staff  2040 Aug  1 22:50 ..
-rw-------   1 mana  staff  1766 Aug  1 22:44 id_rsa
-rw-------   1 mana  staff   409 Aug  1 22:44 id_rsa.pub

注意ポイント
パスフレーズが短いと↓怒られて↓鍵作成に失敗します。

Saving key "/Users/mana/.ssh/id_rsa" failed: passphrase is too short (minimum five characters)

鍵の強度(鍵長)を確認してみます。

$ ssh-keygen -l -f ~/.ssh/id_rsa.pub
2048 SHA256:+OKA8zTBRkOH7shmT36jxXelsEek9RnRI69Xy8RzzB8 mana@mananoMacBookAir.local (RSA)

qiita.com

秘密鍵のフォーマットを見てみます。

$ vi /root/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,8B5E34DBBBC0801DDDC2A5A241775435

c2ACE4A1dOR55tGA7ZmIJ4dUDaVTL3uMyi3OiPlZdYDdnTKKrDpw9hHMILiauoCV
46Njy+DiE1iqNgKJHMKFLm1Flr3iFzehPm+u97qjFubZ5vS5wqYRjI8nSaKpE2X4
DSLUCUMBRIx5uOMuEWxLF4NrL50vgM35WQjAXgPxqZhku7P7pYUEPDekbMP6rlVr
W1kKRuXfIPNC18W40HUaUGnj+qjPm96wuj0TQSZww1k+aAOb+ngbLoXCELYg38WT
rCpAHLOky/BRHQhNDyUbOsV4QZuCMRlSsNEHGC9FP0/dn0azabuNWo40UNhSEmjM
C1zQh5zSP7LzGXo2DD1KfsKjAcfgRPidUD0GIjzqz/9mPDwXOorSOmXYwG9NXyAB
+dljYkcJDyfxaZHR7lJMnm2hegFRmaqlW+eIYPt9S4TgGJ0OM6X3Hbo+jtZQa3/u
DFauOVRj5wfXcSQxS+m9LIb+tuFghBOyAfdJbtFfO/dZDIDH6oB2gXQc6sklIQqU
nnciusaHoRfhI+SM29lLkErwmZ7TARxDkKAUO2qYIczoCJwgYM3PvhTTzaqUj0cY
7PMVYrO5Rlh7kEDBsRr0mjfCV27JQ3B6mLuLwPlqwuk8w/Nlah1MkV+NqZwc4H2W
EjTRls9gFm0jG9EotdfRy9EnRDoYLWWglhgZ0nIqDtfuF2nqFIxSV77/wQHY2cwc
Lx0rRUj6dUhTPEM4ROdVfD6di6WVaNpvTe65kAweRItBf0c66jqJrollKx91xQGF
T5XSLUD+iTOQu+wUM67wVjRVT7sjxYOm9IViBw2GpRD9E+9jEP+mw6FWL1adEony
Vi9Bz1MqxcxEbCQp7uNBjCZjGk3lGnI5nrscfdRJLfWnBGVg9bCABKP+OvNGdKNr
Wyi/TPvjatpBl83Z2b5Dpb/XAhq8IgaAwV973MsJPZzkc18+MMsbvU37RTj4UTL9
dl0rKvxgD6044328PZsEEX19tqQStWEN2JoWxZG//mbpMk+bAP7A9i1x/0cy3JOQ
t0tcSI6vLBjbGD/mVfX49Bl29h/e92p+fioxuNoqvm0K+GSJoJ9VMV6wweI0o2AY
4LMqOxXd/KSg0uixep0zY4QndxvT1uspTDb9JCPA6M5aIi7MMrt/l8amHNNhWco3
c3Tt1bbXhukhMECI5jEPI6SOXobHhr2m6gp78G7Kpcm+X7boAl+cLDtiHZSkeUIJ
CO1cZLsto7xzkqyu7cee5tTW69tBGjTklrGm6LhohV0myKq2I/VCmS7mMLzBNDHj
+5P1qpwhxv+zGgjQg3n+v1rIxilSaah+2Kp7MoGHgQZOD73xw/81KCP77/xoREOJ
QXuCsqk0uGAdTjef/OTUlMCZp1uJro0hrQW8S2pLgKS/t+6F/lzX0qM7HemaKTzi
rDxjhG2fR+hwcjokgw/8PtXjcYAn/CuD3/8to+0D8e+ZQrEwj5rLfSwKk7QmsVmQ
af6R+5iWHVjfLPhtnjyEi1rVyvplheTV7TPqUEx6x3Bt74fYIW9uKttNxO/BiVmE
28GkLxdacwcGRtqDKIgHnBvZz9Z8TRyis66mnd/onZq7QE8gzJXAqtPJVGBpPGsK
-----END RSA PRIVATE KEY-----

公開鍵のフォーマットを見てみる

$ vi /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCunPJl+yHM3LWrufikAFXYMlTaLt7azQ8ciPY8YHKxTXHQtunkFkfazDFJ/8GpU3W9vgNAP2n8XBs41NhjlAl6bi6Ouncs8tJOdNrCOAftX+R2KRI5/S3LuE3wGo411yGNn0MXOl5PFCJLLyRFZG4roD7J6f+hl6Jett8TLIyE1TsFrdVAtzPf0nvs7XHnNc2YU+kK5F0MmPpGpFv5k2mqle8VpxrH0MOu714e8sr7yxBbQpMGmqvJ8Lye/i2P0DSuamBTTMKsw6HUwh9yvKTB7IIKlqYuPJqtZ1otEMiGQOh1tGSKO1x7xHJqcSQ++qaG4F75s9ddWW2AzFMdtLel mana@mananoMacBookAir.local

qiita.com

ゲストOSに公開鍵を配置します。

# rootでログインします。
$ ssh root@192.168.0.6
root@192.168.0.6s password: 

# 公開鍵を配置用ディレクトリを作成します。
$ mkdir /home/mana/.ssh

# 所有者に読み書き実行権限を付与します。
$ chmod 700 /home/mana/.ssh

# ディレクトリと中身の所有者を変更します。
$ chown -R mana:mana /home/mana/.ssh/

# 権限を確認します。
$ ls -la /home/mana/
合計 40
drwx------. 4 mana mana   121  81 23:00 .
drwxr-xr-x. 4 root root    33  68 21:27 ..
-rw-------. 1 mana mana 20968 1025 01:20 .bash_history
-rw-r--r--. 1 mana mana    18  83  2016 .bash_logout
-rw-r--r--. 1 mana mana   193  83  2016 .bash_profile
-rw-r--r--. 1 mana mana   231  83  2016 .bashrc
drwx------. 2 mana mana    29  81 23:18 .ssh
-rw-rw-r--. 1 mana mana   218  712 00:37 err.txt
drwxrwxr-x. 3 mana mana    19  77 00:15 mnt

# ログアウトします。
$ logout
Connection to 192.168.0.6 closed.

# SCPで公開鍵をMacからゲストOSへ配置します。
$ scp .ssh/id_rsa.pub mana@192.168.0.6:~/.ssh/authorized_keys
mana@192.168.0.6s password: 
id_rsa.pub                                                              100%  409   311.1KB/s   00:00 

Linuxコマンド集 - 【 chmod 】 ファイルやディレクトリのアクセス権を変更する:ITpro
Linuxコマンド集 - 【 chown 】 ファイルやディレクトリの所有者を変更する:ITpro
webkaru.net

MacからゲストOSへRAS鍵認証で接続してみます。

接続方法はパスワード認証と同じですが、入力するのがパスワードではなく鍵のパスフレーズとなります。

$ ssh mana@192.168.0.6 # <------------- 鍵作成時に入力したパスフレーズを入力
Enter passphrase for key '/Users/mana/.ssh/id_rsa': 
Last login: Wed Oct 25 01:20:33 2017 from 192.168.0.4

接続できました。

次は、Windows10(ネットワーク内のPC)からもRAS鍵認証でログインできるようにします。
ponsuke-tarou.hatenablog.com