OCI上でサーバの環境構築あれこれ
1.公開鍵認証方式でssh接続
1-1.キーの作成(おまけ)
Windowsのコマンドプロンプトで,
>ssh-keygen -b 4096
(4096は任意鍵長)と打つと,~/.ssh
に公開鍵と秘密鍵が作成される.例えばユーザー名がTanakaさんなら.C:\Users\Tanaka\.ssh
に作成される.
秘密鍵のファイル名がid_rsa
で,公開鍵がid_rsa.pub
となる.
以降の話ではこの節はあまり関係ない.
1-2.OCIでインスタンス作成
sshキーにスポットをあてて話を進める.
1-2-1.キーペアを持っていない場合
[ SSHキーの追加 ]欄で,[キー・ペアを自動で生成 ]を選択し,
[公開キーの保存]→[秘密キーの保存]をクリックすることでキーペア取得できる.
この2つのファイルは大切に保管しましょう.(今後も使いまわせるので)
保存された2つのファイルは,
公開鍵が~.key.pub
秘密鍵が~.key
となっている.
この2つのファイルはどこか好きなディレクトリに格納しとこう.
例:C:\Users\Tanaka\Documents\Oracle
インスタンスを作成.
1-2-2.キーペアを持っている場合
OCIでインスタンスを作成する際,[sshキーの追加]欄がある.
ここで,[公開キー・ファイル(.pub)のアップロード]を選択し,
自身の公開鍵のファイル(~.key.pub)をドラッグ&ドロップでアップロード.
インスタンスを作成.
1-3.ssh接続
sshクライアントを起動してssh接続を試みる.
1-3-1.TeraTermの場合
TeraTermを起動させたら[ ホスト(T) ]にIPアドレスを書いて,
その下の[ TCPポート ]欄に「22」と書く※1.
[ ok ]ボタンを押す.
[ ユーザ名 ]に指定されたユーザ名を記入.
OCIのCentOSの初期ユーザ名は「opc」※2.
[ 認証方式 ]で,[ RSA/DSA/ECDSA/ED25119鍵を使う]を選択し,
1-1節で作成した秘密鍵のパスを指定.
例:
C:\Users\Tanaka\Documents\Oracle\~.key
これで接続できる.
※1:sshのデフォルトのport番号が22.これは後で利用できるport番号内で任意番号に変更可能
※2:AWSのRHEL8の場合は「ec2-user」
1-3-2.PowerShellの場合
これだけ.
> ssh -i [秘密鍵のパス] [ユーザ名]@[IPアドレス]
以上。
2. 環境設定
2-1.パスワード設定
ログインできたら,rootユーザとログインユーザ(今回であればopc)のPassを任意に設定しとく.
まずはroot
$sudo passwd root
(パスワード聞かれるので適当に打つ)
(切り替わるか確かめる)
$ su -
次は別のユーザ
#passwd opc
2-2.ssh接続のconfファイル書き換え
セキュリティの観点から,ssh接続のconfigファイルを書き換える.
$ sudo vi /etc/ssh/sshd_config
とやるといろいろ書き換えられる.
英語読めば何の設定なのか想像つくと思うのでてきとーにやっとく.
Port 11326 (←port番号を22から変更)
PermitRootLogin no (←Rootユーザでログインできないようにする)
PubkeyAuthentication yes (←公開鍵認証方式)
PasswordAuthentication no (←パスワード認証を無効化)
などなど
これではまだ反映されないので,reloadしてメモリの設定を読み込ませる.
(restartじゃないよ)
$ sudo systemctl reload sshd.service
2-3.タイムゾーンを変更
タイムゾーンを東京に変更しとく.
$ sudo timedatectl set-timezone Asia/Tokyo
2-4.変更確かめ
Windows端末のPowerShellでPortして疎通確認.
> Test-NetConnection [ IPアドレス ] -Port [ Port番号 ]
3.yum
参考:https://access.redhat.com/ja/articles/3221791
/etc/yum.confと/etc/yum.repos.dの二つの領域に分かれる。
※rhel8からはyumは廃止されdnfに置き換わっている。使い方はほぼ同じ。
実際、/etc/をみてみると、
[root@publicpc1 etc]# ll|grep yum
drwxr-xr-x. 2 root root 57 Mar 24 12:32 yum
lrwxrwxrwx. 1 root root 12 Nov 12 00:18 yum.conf -> dnf/dnf.conf
drwxr-xr-x. 2 root root 217 Mar 24 12:39 yum.repos.d
[root@publicpc1 yum]# pwd
/etc/yum
[root@publicpc1 yum]# ll
total 0
lrwxrwxrwx. 1 root root 14 Nov 12 00:18 pluginconf.d -> ../dnf/plugins
lrwxrwxrwx. 1 root root 18 Nov 12 00:18 protected.d -> ../dnf/protected.d
lrwxrwxrwx. 1 root root 11 Nov 12 00:18 vars -> ../dnf/vars
となっている。
3-1. yum.conf(dnf.conf)
[root@publicpc1 etc]# cat yum.conf
[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False
[main]はセクション名で、ここに記載されているのはyumのグローバルな設定。
gpgcheck
は署名チェック。1が有効で、0が無効。
3-2. yum.repos.d
[root@publicpc1 yum.repos.d]# ll
total 32
-rw-r--r--. 1 root root 495 May 5 2021 ksplice-ol8.repo
-rw-r--r--. 1 root root 759 Apr 13 2021 mysql-ol8.repo
-rw-r--r--. 1 root root 253 Mar 20 2021 oci-included-ol8.repo
-rw-r--r--. 1 root root 252 Mar 24 12:39 oracle-epel-ol8.repo
-rw-r--r--. 1 root root 694 Mar 24 12:39 oraclelinux-developer-ol8.repo
-rw-r--r--. 1 root root 2740 Mar 24 12:39 oracle-linux-ol8.repo
-rw-r--r--. 1 root root 470 Mar 11 01:09 uek-ol8.repo
-rw-r--r--. 1 root root 243 Mar 11 01:09 virt-ol8.repo
oracle-linux-ol8.repoの中身を見てみると、ダウンロードする際に参照するURLが記載されている。
ここが間違っていると適切にインストールできなくなる。
ただ、ここを編集することはなさそう。
もし社内にあるレポジトリサーバを利用したい場合、対応は2つある。
1つは、 yum.repos.d配下に~.repoファイルを追加する。
2つ目は、yum -y install ~
で追加する方法。
1つ目の場合
# vim /etc/ yum.repos.d/test.repo
[test]
name=test
baseurl=http://xxx.xxx/xxx.xxx/xxx
gpgcheck=0
など。
4.踏み台サーバの準備
4-1.キーペアの準備
4-2.scpでファイル転送
4-3.公開鍵認証の読み込みパス指定
5. Port ForwardingでRDP接続
5.1 sshトンネリング
6.Pythonインストール
7.OCI CLIの利用方法
公式ドキュメントを参考に進めていくとインストールできる。
7.1 Oracle Linux8でオンラインインストール
参考
OCIのクイックインストール:https://docs.oracle.com/ja-jp/iaas/Content/API/SDKDocs/cliinstall.htm#InstallingCLI__linux_and_unix
7.1.1 dnfでインストール
dnfを使用してCLIをインストール
$ sudo dnf -y install oraclelinux-developer-release-el8
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for opc:
Ksplice for Oracle Linux 8 (x86_64) 16 MB/s | 1.2 MB 00:00
MySQL 8.0 for Oracle Linux 8 (x86_64) 9.1 MB/s | 2.4 MB 00:00
MySQL 8.0 Tools Community for Oracle Linux 8 (x86_64) 5.2 MB/s | 308 kB 00:00
MySQL 8.0 Connectors Community for Oracle Linux 8 (x86_64) 214 kB/s | 23 kB 00:00
Oracle Software for OCI users on Oracle Linux 8 (x86_64) 38 MB/s | 46 MB 00:01
Oracle Linux 8 BaseOS Latest (x86_64) 62 MB/s | 49 MB 00:00
Oracle Linux 8 Application Stream (x86_64) 48 MB/s | 37 MB 00:00
Oracle Linux 8 Addons (x86_64) 21 MB/s | 4.9 MB 00:00
Latest Unbreakable Enterprise Kernel Release 6 for Oracle Linu 63 MB/s | 53 MB 00:00
Package oraclelinux-developer-release-el8-1.0-7.el8.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
続いて、cliをインストール
$ sudo dnf install python36-oci-cli
Last metadata expiration check: 0:00:34 ago on Sat 13 Aug 2022 03:23:12 PM GMT.
Dependencies resolved.
===============================================================================================
Package Arch Version Repository Size
===============================================================================================
Installing:
python36-oci-cli noarch 3.14.0-1.el8 ol8_oci_included 14 M
Upgrading:
python36-oci-sdk x86_64 2.78.0-1.el8 ol8_oci_included 23 M
Installing dependencies:
python3-arrow noarch 1.1.1-1.el8 ol8_oci_included 119 k
python3-jmespath noarch 0.10.0-1.el8 ol8_oci_included 48 k
python3-prompt-toolkit noarch 3.0.29-1.0.2.el8 ol8_oci_included 669 k
python3-terminaltables noarch 3.1.0-1.0.1.el8 ol8_oci_included 31 k
python3-typing-extensions noarch 3.7.4.2-1.el8 ol8_oci_included 47 k
python3-wcwidth noarch 0.2.5-3.el8 ol8_oci_included 48 k
Transaction Summary
===============================================================================================
Install 7 Packages
Upgrade 1 Package
Total download size: 38 M
Is this ok [y/N]: y
Downloading Packages:
(1/8): python3-jmespath-0.10.0-1.el8.noarch.rpm 520 kB/s | 48 kB 00:00
(2/8): python3-prompt-toolkit-3.0.29-1.0.2.el8.noarch.rpm 4.2 MB/s | 669 kB 00:00
(3/8): python3-arrow-1.1.1-1.el8.noarch.rpm 740 kB/s | 119 kB 00:00
(4/8): python3-terminaltables-3.1.0-1.0.1.el8.noarch.rpm 298 kB/s | 31 kB 00:00
(5/8): python3-typing-extensions-3.7.4.2-1.el8.noarch.rpm 739 kB/s | 47 kB 00:00
(6/8): python3-wcwidth-0.2.5-3.el8.noarch.rpm 711 kB/s | 48 kB 00:00
(7/8): python36-oci-cli-3.14.0-1.el8.noarch.rpm 46 MB/s | 14 MB 00:00
(8/8): python36-oci-sdk-2.78.0-1.el8.x86_64.rpm 37 MB/s | 23 MB 00:00
-----------------------------------------------------------------------------------------------
Total 45 MB/s | 38 MB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Upgrading : python36-oci-sdk-2.78.0-1.el8.x86_64 1/9
Installing : python3-wcwidth-0.2.5-3.el8.noarch 2/9
Installing : python3-prompt-toolkit-3.0.29-1.0.2.el8.noarch 3/9
Installing : python3-typing-extensions-3.7.4.2-1.el8.noarch 4/9
Installing : python3-arrow-1.1.1-1.el8.noarch 5/9
Installing : python3-terminaltables-3.1.0-1.0.1.el8.noarch 6/9
Installing : python3-jmespath-0.10.0-1.el8.noarch 7/9
Installing : python36-oci-cli-3.14.0-1.el8.noarch 8/9
Cleanup : python36-oci-sdk-2.75.1-1.el8.x86_64 9/9
Running scriptlet: python36-oci-sdk-2.75.1-1.el8.x86_64 9/9
Verifying : python3-arrow-1.1.1-1.el8.noarch 1/9
Verifying : python3-jmespath-0.10.0-1.el8.noarch 2/9
Verifying : python3-prompt-toolkit-3.0.29-1.0.2.el8.noarch 3/9
Verifying : python3-terminaltables-3.1.0-1.0.1.el8.noarch 4/9
Verifying : python3-typing-extensions-3.7.4.2-1.el8.noarch 5/9
Verifying : python3-wcwidth-0.2.5-3.el8.noarch 6/9
Verifying : python36-oci-cli-3.14.0-1.el8.noarch 7/9
Verifying : python36-oci-sdk-2.78.0-1.el8.x86_64 8/9
Verifying : python36-oci-sdk-2.75.1-1.el8.x86_64 9/9
Upgraded:
python36-oci-sdk-2.78.0-1.el8.x86_64
Installed:
python3-arrow-1.1.1-1.el8.noarch python3-jmespath-0.10.0-1.el8.noarch
python3-prompt-toolkit-3.0.29-1.0.2.el8.noarch python3-terminaltables-3.1.0-1.0.1.el8.noarch
python3-typing-extensions-3.7.4.2-1.el8.noarch python3-wcwidth-0.2.5-3.el8.noarch
python36-oci-cli-3.14.0-1.el8.noarch
Complete!
インストール完了したらバージョン確認。
$ oci --version
3.14.0
7.1.2 構成ファイルの設定
$ oci setup config
This command provides a walkthrough of creating a valid CLI config file.
The following links explain where to find the information required by this
script:
User API Signing Key, OCID and Tenancy OCID: https://docs.cloud.oracle.com/Content/API/Concepts/apisigningkey.htm#Other
Region:
https://docs.cloud.oracle.com/Content/General/Concepts/regions.htm
General config documentation:
https://docs.cloud.oracle.com/Content/API/Concepts/sdkconfig.htm
Enter a location for your config [/home/opc/.oci/config]:特に指定しなくてok
Enter a user OCID: OCIコンソールよりユーザのOCIDをコピペ
Enter a tenancy OCID: OCIコンソールよりコピペ
Enter a region by index or name(e.g.
1: af-johannesburg-1, 2: ap-chiyoda-1, 3: ap-chuncheon-1, 4: ap-dcc-canberra-1, 5: ap-hyderabad-1,
6: ap-ibaraki-1, 7: ap-melbourne-1, 8: ap-mumbai-1, 9: ap-osaka-1, 10: ap-seoul-1,
11: ap-singapore-1, 12: ap-sydney-1, 13: ap-tokyo-1, 14: ca-montreal-1, 15: ca-toronto-1,
16: eu-amsterdam-1, 17: eu-frankfurt-1, 18: eu-marseille-1, 19: eu-milan-1, 20: eu-paris-1,
21: eu-stockholm-1, 22: eu-zurich-1, 23: il-jerusalem-1, 24: me-abudhabi-1, 25: me-dcc-muscat-1,
26: me-dubai-1, 27: me-jeddah-1, 28: mx-queretaro-1, 29: sa-santiago-1, 30: sa-saopaulo-1,
31: sa-vinhedo-1, 32: uk-cardiff-1, 33: uk-gov-cardiff-1, 34: uk-gov-london-1, 35: uk-london-1,
36: us-ashburn-1, 37: us-gov-ashburn-1, 38: us-gov-chicago-1, 39: us-gov-phoenix-1, 40: us-langley-1,
41: us-luke-1, 42: us-phoenix-1, 43: us-sanjose-1): 13(OCIコンソールをブラウザで開いてURLを見るとわかる
Do you want to generate a new API Signing RSA key pair? (If you decline you will be asked to supply the path to an existing key.) [Y/n]: Y
Enter a directory for your keys to be created [/home/opc/.oci]:
Enter a name for your key [oci_api_key]:
Public key written to: /home/opc/.oci/oci_api_key_public.pem
Enter a passphrase for your private key (empty for no passphrase):
Private key written to: /home/opc/.oci/oci_api_key.pem
Fingerprint: ~なんか記載されている~
Config written to /home/opc/.oci/config
完了すると、~/.oci配下にoci_api_key_public.pemが作成されているはず。このキーをOCIコンソールで
アイデンティティ>ユーザー>ユーザーの詳細
に行くと、画面サブに「APIキー」があるのでクリックし、oci_api_key_public.pemの中身を張り付ける。
試しに実行してみる。
$ oci compute instance list --all
Usage: oci compute instance list [OPTIONS]
Error: Missing option(s) --compartment-id.
コンパートメントIDをオプションで追記しろとのこと。
$ oci compute instance list --compartment-id <OCID貼り付け>
いっぱい表示された
ただ、毎回コンパートメントIDを打ち込むのは面倒なので、oci_cli_rcファイルに書き込むことでコマンド入力時にオプション付ける必要がないようにする。
$ vi ~/.oci/oci_cli_rc
[DEFAULT]
compartment-id=<コンパートメントID>
7.1.3 プライベートサブネットからOCI CLIを実行する方法
OCI CLIでコマンドを実行するとAPIエンドポイントと通信を行う。そのため、プライベートサブネットからAPIを発行してエンドポイントへ到達させるにはいくつかの設定が必要になる。方法は以下3つ。
①NATゲートウェイを利用してインターネットに出ていく。②サービスゲートウェイを使用して、OCI環境内に閉じた通信を行う。③プロキシを使用してインターネットへ出ていくルートを作る。
なずは何も設定しない状態でプライベートサブネットからコマンドを実行してみる。その際、APIの実行履歴を出力させるためにデバックオプション--debug(または-d)をつけて実行する。
$ oci compute instance list --all -d
~省略~
DEBUG:oci.base_client.140243454499864:Endpoint: https://iaas.ap-tokyo-1.oraclecloud.com/20160918
INFO:oci.base_client.140243454499864: 2022-08-14 15:05:12.072064: Request: GET https://iaas.ap-tokyo-1.oraclecloud.com/20160918/instances
INFO:oci.base_client.140243454499864: 2022-08-14 15:05:23.487363: Request: GET https://iaas.ap-tokyo-1.oraclecloud.com/20160918/instances
~つづく~
となり、エンドポイントへの接続を所定の回数試行して失敗すると、以下のようなエラーが返ってくる。
oci.exceptions.ConnectTimeout: (MaxRetryError("OCIConnectionPool(host='iaas.ap-tokyo-1.oraclecloud.com', port=443): Max retries exceeded with url: /20160918/instances?compartmentId=ocid1.compartment.oc1..aaaaaaaantybfae5pn7h77jmgcwgzg2hm27gv6whsiwhmo54ycefc3sxyiwa (Caused by ConnectTimeoutError(<oci.base_client.OCIConnection object at 0x7f8cf8e2f2b0>, 'Connection to iaas.ap-tokyo-1.oraclecloud.com timed out. (connect timeout=10.0)'))",), 'Request Endpoint: GET https://iaas.ap-tokyo-1.oraclecloud.com/20160918/instances See https://docs.oracle.com/en-us/iaas/Content/API/Concepts/sdk_troubleshooting.htm for help troubleshooting this error, or contact support and provide this full error message.')
実際、エンドポイント(iaas.ap-tokyo-1.oraclecloud.com)にpingを打っても返ってこない。
7.1.3.1 NATゲートウェイの利用
NATゲートウェイを作成して、プライベートサブネットのルート表に追加させる。
まずは、
ネットワーキング>仮想クラウド・ネットワーク>仮想クラウド・ネットワークの詳細>NATゲートウェイ
から「NATゲートウェイの作成」を行う。作成したNATゲートウェイをルート表のルート・ルールに追加する。
追加できたら、まずはエンドポイント(iaas.ap-tokyo-1.oraclecloud.com)にpingを打つ。きっと返ってくるはずだ。
エンドポイントへの疎通が確認できたら、OCIコマンドを実行してみよう。
$ oci compute instance list --all -d
インスタンス情報が出力されたと思う。
7.1.3.2 サービスゲートウェイの利用
社内ルールで、むやみにインターネットに出ていける設定をしてはいけない場合もあるはず。そういった場合には、OCIのVCN内に閉じた環境でエンドポイントへの通信できるサービスゲートウェイを利用するといい。
ネットワーキング>仮想クラウド・ネットワーク>仮想クラウド・ネットワークの詳細>サービス・ゲートウェイ
からサービスゲートウェイを作成する。
作成したら、さきほどと同じようにプライベートサブネットのルート表のルート・ルールに追加する。
追加できたら、まずはエンドポイント(iaas.ap-tokyo-1.oraclecloud.com)にpingを打つ。きっと返ってくるはずだ。
エンドポイントへの疎通が確認できたら、OCIコマンドを実行してみよう。
$ oci compute instance list --all -d
インスタンス情報が出力されたと思う。
7.1.3.3 プロキシを使用してインターネット経由のルーティング
https通信を行う際にプロキシ経由するように設定をするだけでよい。
$ export HTTPS_PROXY=http://10.1.1.45:3128
設定した後はOCI CLIコマンドを実行すると成功するはずだ。
7.1.4 インスタンスプリンシパルの設定
7.2 インスタンスプリンシパルの設定
さきほどまではAPIを用いてユーザ認証を実行してきた。それとは別に、インスタンスに対して実行権限を付与させる方法がある。それがインスタンスプリンシパル。プリンシパルは操作の実行主体を指す。
7.2.1 別ユーザで実行する
7.3 仮想環境の作成
システム全体にCLIをインストールするのは非推奨。
7.3.1 仮想環境を構成するディレクトリ作成
仮想環境を構成するディレクトリを作成する。
このディレクトリは、仮想環境をアクティブ化する際に打つパスになるので
よく考えてディレクトリ名はつけるように。
[root@publicpc oci]# pwd
/opt/oci
7.3.2 仮想環境作成
まずはPythonのバージョンを確認する。
[opc@publicpc ~]$ python --version
Python 3.6.8
バージョンに応じた仮想環境作成のコマンドを打つ。
python<Pythonのバージョン> -m venv <仮想環境名>
[root@publicpc oci]# python3.6 -m venv venv1
/opt/oci配下にvenv1という仮想環境が作成される。
7.3.3 仮想環境をアクティブ化
OCI CLIのコマンドを打つときは、仮想環境をアクティブ化したうえで実行させる。
アクティブ化させるコマンドは以下の通り。
[root@publicpc oci]# source /opt/oci/venv1/bin/activate
(venv1) [root@publicpc oci]#
ちなみに、非アクティブ化は以下でできる。
(venv1) [root@publicpc oci]# deactivate
[root@publicpc oci]#
7.4 OCI-CLIのオフラインインストール
会社の社内規則などによってLinuxサーバがインターネット接続できない場合、自分がWindows端末にインストールファイルをダウンロードし、
そのファイルをLinuxサーバに配置して読み込ませることでCLIの実行環境を準備することができる。
Github(https://github.com/oracle/oci-cli/releases)から、oci-cli.zipをローカルにダウンロード。
oci-cli.zipを作Linuxサーバに配置し解凍する。
Discussion