SequelProで多段SSH接続/SCPで多段接続

多段SSH接続SCPで多段接続

私のAWSの構成図です。
管理者は、SSHで接続する時にまず踏み台サーバーにアクセスし、そこからWebサーバーへアクセスします。
更にデータベースへのアクセスはWebサーバー経由で行ない、直接Webサーバーやデータベースへは接続できない構成になっています。
このため不便ですが、サーバー内に入って作業する時は段階的にSSH接続する必要がありました。
そこまではあまり問題がなかったのですが、データベースをGUI環境で操作したい時に困りました。

データベース用GUIソフトのSequelProです。
これは、1度の接続でデータベースまで到達する必要があります。つまり、踏み台を乗り越えて接続する必要があるということです。
調べてみた結果、「多段SSH」なるものがあり、これを解決したのでここに備忘録として残しておきます。


※公開鍵と秘密鍵を既に作成しており、これを用いてSSH接続できる事を前提とします。

以上に詳しく載っています。


今回の流れは、今まで段階的に接続していたものを、一気にWebサーバーまで接続します。
その後にDBへ接続して、完了です。

パーミッションがシビアですので、以上のqiitaを参考にパーミッション確認を行なってください。

ターミナル
$ cd ~/.ssh
.sshに移動

$ ls -la
権限を含めたファイル一覧表示(パーミッション確認)
ターミナル
$ vim config
configファイル編集する

まず、踏み台サーバーまでの接続を行う編集です。

config
Host ec2-bas
  HostName *.*.*.*
  User ec2-user
  IdentityFile ~/Desktop/hoge/bastion.pem
  Port 49200

Host:接続時に使う名前です(なんでもいいです)。
HostName:踏み台サーバーに割り当てられているElasticIPアドレスを指定します。グローバルIPアドレスです。
User:そのサーバーに接続ができるユーザーを設定します。
IdentityFile:秘密鍵の場所を指定します。私の場合は、.sshディレクトリではなく、Desktopに置いてあるのでそちらを指定しています。
Port:そのサーバーに接続する時のポート番号を指定します。デフォルトだとSSHは22番ポートですが、セキュリティを考慮し、変えています。

ターミナル
$ ssh ec2-bas

.sshディレクトリ上で、以上のコマンドで接続できるか試してみてください。
接続できたら一旦ログアウトしてもらい、次にWebサーバーへの接続を追記します。
先ほど記述したec2-basの下に以下を追記します。

config
Host ec2-web
  HostName *.*.*.*
  User hoge
  IdentityFile ~/Desktop/hoge/id_rsa
  Port 49200
  ProxyCommand ssh ec2-bas -W %h:%p

ec2-basと書き方は変わりません。
自分のWebサーバーは外部からアクセスできないようにElasticIPアドレスを割り当てていません。その場合はローカルIPをHostNameに指定します。
更に、Userには作業用ユーザーを作成し、そのユーザーで接続をするように鍵を設定しましたのでUserもec2-userから変わっています。
最後のProxyCommandにて、ec2-webに接続する際のコマンドを指定しています。これがあるので、まずec2-basに接続した上でec2-webが接続する設定になります。

ターミナル
$ ssh ec2-web

以上のコマンドで接続できたら完了です。

次にSequelProに接続を行います。

MySQLホスト:AWSだと、RDSのホスト名です。それ以外ならMySQLのIPアドレスを指定します。
ユーザ名、パスワード、ポート:MySQLへの接続ユーザー名、パスワード、ポート(デフォルトは3306)です。

その下は先ほど指定したWebサーバーへの接続名(ec2-web)とユーザー名、ポート番号です。
ローカルのパスワードを指定する必要はありません。これはconfigファイルに既に書かれているからです。

これで接続できるかと思います。


最後に多段SCPの方法を残して、終わりたいと思います。
デスクトップにあるhoge.zipをwebサーバー上の/var/www/htmlディレクトリにアップロードする場合を想定しています。
.sshディレクトリ内にて以下のコマンドを行います。

ターミナル
$ scp -P 49200 ~/desktop/hoge.zip ec2-web:/var/www/html

scp -P ポート番号指定 ローカルのファイル名 configに指定した接続名:アップロード先のサーバーディレクトリ名

以上でアップロードもできます。ぜひやってみてください。