おらくるのいる生活

OracleのDBAとしての、障害対応やらパフォーマンス・チューニングやらの日々を綴っています

RHEL 8上にOracle19c RACをインストールする方法(2)

前回はssh設定はちゃんとやっているのに、ssh接続が設定されていないというエラーが出てしまったので、まずそこを調べるところから始めます。

 

bismarc256.hateblo.jp

検証に使用した環境は以下の通りです。

 

Oracle Real Application Clusters(RAC) EE 19.17

RHEL 8.3

早速MOS(MyOracleSupport)で調べると、以下のドキュメントが見つかりました。

INS-06006 GI RunInstaller Fails If OpenSSH Is Upgraded to 8.x (ドキュメントID 2555697.1)

概略をかいつまむと、

  • OpenSSH 8.0ではセキュリティ対策(CVE-2019-6111)でクライアント側で要求したファイル名と、サーバから送られるファイル名が一致するかのチェックを行うようになった
  • この結果、ファイル名にシングルクォートをつけるとエラーになる
  • -Tオプションを付けると、このチェックが無効となりエラーは発生しない
  • OpenSSHの動作はOSによって異なり、AIXではOpenSSH 7.5、SLES Linux 12 SP4では OpenSSH_7.2p2で同じ問題が発生する

と、なります。

# scp -p <racnode2>:"'/tmp/test.txt'" /tmp/test.txt
protocol error: filename does not match request

# scp -T -p <racnode2>:"'/tmp/test.txt'" /tmp/test.txt
test.txt 100% 2 0.1KB/s 00:00

RACのインストールでは1ノードのみでファイルを展開し、他ノードへはインストーラが自動でscpする仕組みですが、この時にファイル名にシングルクォートをつけている為、OpenSSH 8.0ではエラーになってしまう、という事象ですね。

デバッグモードで実行すると、ファイル名にシングルクォートが付いている事がログから読み取れます。

$ gridSetup.sh -debug | tee /tmp/gridsetup.log

[Worker 0] [ 2019-05-31 14:40:49.921 CST ] [UnixSystem.remoteCopyFile:848]  UnixSystem: /usr/local/bin/scp -p <racnode2>:'/tmp/GridSetupActions2019-05-31_02-39-46PM/CVU_19.0.0.0.0_grid/scratch/getFileInfo12906.out' /tmp/GridSetupActions2019-05-31_02-39-46PM/<racnode2>.getFileInfo12906.out
[Thread-440] [ 2019-05-31 14:40:49.921 CST ] [StreamReader.run:62]  In StreamReader.run
[Worker 0] [ 2019-05-31 14:40:49.921 CST ] [RuntimeExec.runCommand:294]  runCommand: Waiting for the process
[Thread-439] [ 2019-05-31 14:40:49.921 CST ] [StreamReader.run:62]  In StreamReader.run

 

対処法は以下の2つのどちらかです。

  • scp実行時に-Tオプションを強制的につけさせる
  • パッチ30159782を適用する

 

scp実行時に-Tオプションを強制的につけさせる方法は以下の通りです。

※全てrootユーザで実行。

# オリジナルのscpをリネームする
mv /usr/bin/scp /usr/bin/scp.orig

# 新しくファイルを作成し、以下の行を書き込む
vi /usr/bin/scp

/usr/bin/scp.orig -T $*

# 権限を変更
chmod 555 /usr/bin/scp

#インストール実行後、元に戻す

mv /usr/bin/scp.orig /usr/bin/scp

※言うまでもありませんが、scpに手を加える方法はOS管理者の許可が必要です。

パッチ30159782を適用してインストールする方法は以下の通りです。

※ここでは19.17RUを/work/patch、パッチ30159782を/work/patch3に展開しています。

$ unzip p30159782_195000OCWRU_Linux-x86-64.zip -d /work/patch3/

$ unzip p34419443_190000_Linux-x86-64.zip -d /work/patch/

$ export CV_ASSUME_DISTID=OL7
$ cd /u01/app/19.0.0/grid

$ ./gridSetup.sh -applyRU /work/patch/34419443  -applyOneOffs /work/patch3/30159782/  -silent -responseFile /work/gridsetup19c_RAC.rsp

 

 

更に以下のドキュメントも見つけました。

GI runInstaller Fails with INS-6006 despite fixing Bug 30159782 (ドキュメントID 2921432.1)

パッチ30159782を適用していてもエラーが発生する、という事象です。

対処法はPEM形式でrsaのキー作成する事で、コマンドは以下の通りです。

$ ssh-keygen -t rsa -m pem -P '' -N '' -f ~/.ssh/id_rsa -q"

一時的とは言え商用環境でscpコマンドに手を加えてしまうのは余り好ましくないので、PEM形式でrsaキーを作成し、パッチ30159782を適用してインストールするのが現実的な解決策と言えるでしょう。