SequelAceでAWS RDSへの接続に苦戦した話

wago
·

背景: MySQL8へのアップグレードに合わせてSequelProからSequelAceに変更したら接続できなくなった話

1. VPCのプライベートサブネットにあるEC2インスタンスを踏み台にしてssh/ssmでRDSに接続していた。(SequelPro)

  • .ssh/config

# SSH over Session Manager

Host AWSEC2

HostName インスタンスID

User ec2-user

IdentityFile ~/.ssh/キーペア.pem

ProxyCommand sh -c "PATH=$PATH:/usr/local/bin/ && aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"

2. MySQL5.7を8.0.28へアップグレード

3. SequelProがMySQL8に対応していないため、[SequelAce](https://github.com/Sequel-Ace)に変更

4. aws cliの権限がなく接続できず…

エラー

Used command: /usr/bin/ssh -v -N -S none -o ControlMaster=no -o ExitOnForwardFailure=yes -o ConnectTimeout=10 -o NumberOfPasswordPrompts=3 -o UserKnownHostsFile="/Users/ユーザー名/.ssh/known_hosts" -F /Users/ユーザー名/.ssh/config -o TCPKeepAlive=no -o ServerAliveInterval=60 -o ServerAliveCountMax=1 AWSEC2 -L 49895:hogehoge-aurora-cluster.cluster-ro-xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com:3306

OpenSSH_9.0p1, LibreSSL 3.3.6

debug1: Reading configuration data /Users/ユーザー名/.ssh/config

debug1: /Users/ユーザー名/.ssh/config line 2: Applying options for AWSEC2

debug1: Authenticator provider $SSH_SK_PROVIDER did not resolve; disabling

debug1: Executing proxy command: exec sh -c "PATH=$PATH:/usr/local/bin/ && aws ssm start-session --target インスタンスID --document-name AWS-StartSSHSession --parameters 'portNumber=22'"

debug1: identity file /Users/ユーザー名/.ssh/キーペア.pem type -1

debug1: identity file /Users/ユーザー名/.ssh/キーペア.pem-cert type -1

debug1: Local version string SSH-2.0-OpenSSH_9.0

sh: /usr/local/bin/aws: Operation not permitted

kex_exchange_identification: Connection closed by remote host

Connection closed by UNKNOWN port 65535

SSHトンネルは予期せず閉鎖されました。

5. SequelAceにフルディスクアクセスを設定してみても改善せず…

6. SequelAce公式にもissueはいくつか上がっていたが解決できていなさそう。Qiitaなども漁ってみたがダメだった…

おそらくの原因

  • SequelAceがSandboxで動いているから( <https://sequel-ace.com/get-started/> )

  • Sandbox上で動いているであろうターミナル?に権限を付与できないとおそらくaws cliが利用できない。(仮想環境に疎くこれ以上わかっていない)

解決した方法

踏み台EC2の22番ポートをSSMでローカルにポートフォワーディングした

1. .ssh/configをローカルホストに変更(ポートは適当)

.ssh/config

# SSH LocalPortForward

Host TESTHOST

HostName localhost

User ec2-user

Port 10022

IdentityFile ~/.ssh/キーペア.pem

2. aws cliのssmでポートフォワーディング(.ssh/configのポートと合わせる)

ターミナルで↓コマンド

aws ssm start-session --target インスタンスID --document-name AWS-StartPortForwardingSession --parameters '{"portNumber":["22"],"localPortNumber":["10022"]}'

↓ ↓ ↓ ↓ ↓ ↓

Starting session with SessionId: hogehoge-foo-xxxxxxxxxxxxxxxx

Port 10022 opend for sessionId hogehoge-foo-xxxxxxxxxxxxxxxx .

Waiting for connections...

3. SequelAceのSSH Hostを.ssh/configのホスト名(`TESTHOST`)にして「Connect」で接続できればOK。接続できるとSSMのログに↓が出力。

Connection accepted for session (hogehoge-foo-xxxxxxxxxxxxxxxx)