SSHしかつなげない・外部通信もできないサーバーでyumするメモ


VPN構成や、できたての仮想マシン等で、アウトバウンドまで制限され、外部(グローバル)ネットワークに接続できないセキュアなLINUX(RedHat系)サーバーにSSH接続している場合にyumしたい場合の対応。
あくまで、メンテナンス時の刹那に行った事のまとめなので、もっと良い方法あるかもしれません。1つの手法として見てください。
3種類全てのフォワードを利用しているところが特徴なので、SSHポートフォワーディングの応用として利用できるかもしれません。

条件

  • パソコンから外部ネットワークにつながるSSHサーバーがある事
  • あくまでメンテナンス時の「一時的対応する場合」等、なるべく対象を絞って実施する
  • SSHトンネル内の通信なので遅い

図解

「オレンジ矢印」の様にSSH接続し、「黒矢印」のソケット通信(更にSSH)経由で外部通信。

登場人物
① パソコン - 敏腕ネゴシエーター
② セキュアサーバー - 外部接続できないカゴの鳥
③ SSHサーバー - そしてyumへ

「①パソコン」でやる事

2つのSSH接続を行います。

■ 1.「①パソコン」から「③SSHサーバー」へSSH接続(ローカルフォワード)

新しいターミナルで接続

ssh -L 19922:localhost:22 【③SSHサーバーのhost】

ポートフォワーディングのトンネルを作ります。「源ポート=19922」「送り先=localhost:22」「ローカル」を設定

  • 接続向けのオプションは省略しています。
  • 「19922」は任意の使っていないポート番号
  • コンソールがリモートに移るが嫌なら「-f」「-N」オプションをつけてバックグラウンドにしても良いが、終わった後に接続を確実に切断する為、ターミナルを複数立ち上げる事をお勧めする。

■ 2.「①パソコン」 から「②セキュアサーバー」へSSH接続(リモートフォワード)

新しいターミナルで接続

ssh -R 19922:localhost:19922 【②セキュアサーバーのhost】

ポートフォワーディングのトンネルを作ります。「源ポート=19922」「送り先=localhost:19922」「リモート」

  • 接続向けのオプションは省略しています。
  • 「19922」は任意の使っていないポート番号(■ 1と同じに)
  • パソコンにSSHサーバーが建てられている場合はこの工程は必要ない(ポート番号は合わせましょう)。
  • コンソールがリモートに移るのが嫌なら〃

「②セキュアサーバー」でやる事

1つのSSH接続を行い、yumのプロキシ設定を変更する。

■ 3.「②セキュアサーバー」から「③SSHサーバー」へSSH接続(ダイナミックフォワード)

新しいターミナル(「②セキュアサーバー」)上で実行

ssh -D 8801 -p 19922 localhost
  • 認証向けのオプションは省略しています。
  • 「19922」は任意の使っていないポート番号(■ 1と同じに)
  • 「8801」は②セキュアサーバー上で利用していない任意のポート
  • コンソールがリモートに移るのが嫌なら〃

■ 4.「②セキュアサーバー」のyum設定を変更

新しいターミナル(「②セキュアサーバー」)上で実行

$ sudo vi /etc/yum.conf
/etc/yum.conf

【最後の行に追加】

proxy=socks5://localhost:8801

  • 「8801」は②セキュアサーバー上で利用していない任意のポート■ 3.と同じに

その後、いっぱいyumする。

終わったら行を削除して戻しておく。(どうせグローバル接続することがなければいいか・)

■ 4.の工程を変えれば、プロキシ設定できるアプリやミドルウェアに応用できます。

今回は「メンテナンス時」「yumのアプリケーションのみ」といった限定的な対応でしたが、実運用環境などの場合はアウトバウンドを遮断している状態には意味があるので、それを尊重して対応するよう気をつけてください。

以上