Memo

メモ > サーバ > 各論: ネットワーク > SSHで多段接続とポートフォワーディング

■SSHで多段接続とポートフォワーディング
■ポートフォワーディングの概要 ローカルコンピュータの特定のポートに送られてきたデータを、 別な通信経路を用いてリモートコンピュータの特定ポートに送信すること 「トンネル」「トンネリング」などと呼ばれたりもする ポートフォワードとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典 https://wa3.i-3-i.info/word12664.html 混乱しがちな「SSHトンネルの確立方法」をイメージ図とセットでまとめたコマンド集 - GIGAZINE https://gigazine.net/amp/20210209-ssh-tunnel ■SSH多段接続の確認 C:\Users\refirio\.ssh\config で以下のように設定しておくと、「ssh refirio-entrance」のみで接続できる (Poderosaは多段接続に対応していないようなので、Git Bash や ConEmuで試した) さらに「ssh refirio-web1」とすれば、refirio-entrance を経由して refirio-web1 に多段接続できる 踏み台サーバを経由して本番サーバに接続する場合、何度もsshコマンドを入力せずとも接続できる 踏み台サーバと本番サーバで別々の鍵を使う場合、両方の鍵が接続元のローカルに必要 (逆に言えば、踏み台サーバに本番サーバの鍵を置く必要は無い)
Host refirio-entrance Hostname 203.0.113.2 User ec2-user Port 10022 IdentityFile C:/Users/refirio/Documents/SSH/refirio/refirio-prod.pem IdentitiesOnly yes Host refirio-web1 Hostname 10.0.1.3 User ec2-user Port 10022 IdentityFile C:/Users/refirio/Documents/SSH/refirio/refirio-prod.pem IdentitiesOnly yes ProxyCommand ssh refirio-entrance -W %h:%p
■ポートフォワーディングの実行(Vagrant) Windows環境で、Vagrant(http://192.168.10.10/ であるとする)に対してポートフォワーディングを実行する
$ ssh -fNCL 0.0.0.0:80:localhost:80 vagrant@192.168.10.10 The authenticity of host '192.168.10.10 (192.168.10.10)' can't be established. ECDSA key fingerprint is SHA256:s6TtuBDr5iBjWO9atbRydfyuY8+dAz45l408mEpfc04. Are you sure you want to continue connecting (yes/no)? yes … 「yes」を入力(初回のみ) Warning: Permanently added '192.168.10.10' (ECDSA) to the list of known hosts. … セキュリティ警告が出るが承認
コマンドの意味は 「80番ポートのすべてのパケット(0.0.0.0:80)を localhost:80 に転送する。vagrant@192.168.10.10 をゲートウェイとする」 となる オプション「-fNCL」の意味は以下のとおり -f ... SSHをバックグラウンドで実行する -N ... リモートのコマンドを実行せず、待機状態にする -C ... データを圧縮して送る -L ... ポートフォワーディングを行う これで自身からは http://192.168.10.10/ だけでなく、 http://127.0.0.1/ http://localhost/ でもVagrantにアクセスできるようになる (この状態なら、自身のIPアドレスを指定すれば、同一ネットワークの他端末からのブラウザアクセスが可能) なお対象サーバを再起動した場合、SSH接続が切れるのでポートフォワーディングも解除される 以下のようにconfigの名前を指定してポートフォワーディングを行えば、configの内容で接続したり、多段接続したりもできる
$ ssh -fNCL 0.0.0.0:80:localhost:80 refirio-dev $ ssh -fNCL 0.0.0.0:80:localhost:80 refirio-web1
ポートフォワーディングを終了させる場合、以下のようにする
$ ps | grep ssh … SSHのプロセス番号を確認 9260 1 9260 9260 ? 197609 14:12:18 /usr/bin/ssh $ kill 9260 … SSHを終了
なお、コマンドプロンプトでポートフォワーディングを行った場合、以下で確認&終了できる
>tasklist | findstr ssh … タスク一覧を確認 >taskkill /F /IM ssh.exe … SSHを終了
SSH でファイアウォールを越える - いますぐ実践! Linuxシステム管理 / Vol.101 http://www.usupi.org/sysad/101.html ポートフォワーディングで80番ポートを解放せずにブラウジングする - はむはむエンジニアぶろぐ http://hamuhamu.hatenablog.jp/entry/2017/05/05/095509 SSHポートフォワーディングを知った話 - Qiita https://qiita.com/Ayaka14/items/449e2236af4b8c2beb81 SSH ポートフォワーディング http://www14.plala.or.jp/campus-note/vine_linux/server_ssh/ssh_portforwarding.html Windows でコマンドラインでプロセスを kill する - ablog http://d.hatena.ne.jp/yohei-a/20090911/1252644040 踏み台サーバ経由で SSH ポートフォワーディングする手順 - Neo's World https://neos21.net/blog/2019/08/26-01.html Linux | 多段SSH, ポートフォワーディングの方法 - わくわくBank https://www.wakuwakubank.com/posts/681-ssh-portforward-multistage/ SSHポートフォワードで、Linuxサーバを踏み台に、その先に通信 [インフラエンジニアのPC環境] https://pc.oreda.net/tips/sshportfoward ■ポートフォワーディングの実行(EC2) ※「ポートフォワーディングの実行(Vagrant)」も参照 Windows環境から、EC2に対してポートフォワーディングを実行する 以下で対象のEC2に接続できるものとする
> ssh ec2-user@203.0.113.1 -p 10022 -i C:/Users/refirio/Documents/SSH/refirio/refirio-prod.pem
以下でポートフォワーディングを実行
> ssh -NCL 80:localhost:80 ec2-user@203.0.113.1 -p 10022 -i C:/Users/refirio/Documents/SSH/refirio/refirio-prod.pem
10秒ほど待ってから http://localhost/ にアクセスすると http://203.0.113.1/ の内容が表示されるようになった localhostにアクセスしたとき、サーバには以下のようなアクセスログが記録された
127.0.0.1 - - [06/Dec/2023:13:34:19 +0900] "GET / HTTP/1.1" 200 136 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" 682 - - any
「Ctrl+C」でキャンセルすると、もとの状態に戻った なおタスクの確認と強制終了は、以下のコマンドで行える
> tasklist | findstr ssh > taskkill /F /IM ssh.exe
■ポートフォワーディングの実行(接続元IPアドレスの変更) IPアドレスを変更した状態で、ブラウザソフト経由で他サイトにアクセスする https://www.cman.jp/network/support/go_access.cgi IPアドレスは「203.0.113.99」と表示されるとする 以下を実行する
> ssh -NCL 80:www.cman.jp:80 ec2-user@203.0.113.1 -p 10022 -i C:/Users/refirio/Documents/SSH/refirio/refirio-prod.pem
10秒ほど待つ https://www.cman.jp/network/support/go_access.cgi IPアドレスは「203.0.113.99」と表示されるが、 http://localhost/network/support/go_access.cgi http://127.0.0.1/network/support/go_access.cgi にアクセスするとIPアドレスは「203.0.113.1」と表示される さらに C:/windows/System32/drivers/etc/hosts で以下を設定すると
127.0.0.1 www.cman.jp
http://www.cman.jp/network/support/go_access.cgi IPアドレスは「52.193.221.232」と表示される つまり、接続元IPアドレスを変更できている ※httpsでアクセスすると、「この接続ではプライバシーが保護されません」と表示されるので注意 ※さらに他サイトからデータを引っ張ってきている場合、その部分は表示されない可能性があるので注意 ■ConEmuで多段接続 コマンドでの接続は、前述の「SSH多段接続の確認」を参照 Poderosaは多段接続に対応していないようなので、ConEmuを試した (PoderosaでもいったんローカルのSSHにアクセスするなどすれば、多段接続できると思われる。がアクセスが面倒) Git Bash なら多段接続できるが、Git Bash は画面の色設定をカスタマイズするのが大変そう ConEmuがよく紹介されているので試した Git Bashでディレクトリが見にくいので、カラー設定を変更する - みちしるべ http://orangeclover.hatenablog.com/entry/20120922/1348261855 ConEmu 突っ込んだら Git for Windows の Git Bash がカッコよくなった - てっく煮ブログ http://tech.nitoyon.com/ja/blog/2014/03/07/fancy-git-bash/ https://conemu.github.io/ にアクセス 「Download」をクリック 「Download ConEmu Stable, Installer (32-bit, 64-bit)」からダウンロードし、インストール まずは画面の色を調整する。ConEmuを起動し、 View (pallets) → <Solarized (Luke Maciak)> とすれば「Solarized (Luke Maciak)」の色をプレビューできる。好みのものを探す Settings → Features → Colors 「Schemes」で起動時の色を設定する 次にConEmuで Git Bash を使えるようにする Settings → Startup → Tasks 「Predefined tasks」で「7 {Bash::Git bash}」を選択 「Hotkey」に「F1」を入力 下部のテキストエリアに以下を入力 "%ProgramFiles%\Git\bin\sh.exe" --login -i -new_console:d:C:\Users\refirio これでConEmuを起動してF1キーを押すと、Git Bash を使えるようになる 起動時に初めから Git Bash を使いたければ、 Settings → Startup で「Specified named task」で「{Bash::Git bash}」を選択する ConEmuの設定については、以下のページも参考になる おすすめのCUI環境〜GitBashとConEmu〜 - Qiita https://qiita.com/CyberMergina/items/69cd5890f05d502716c8 Windows その3 - ConEmuで快適なコンソール環境を・おすすめのコンソールエミュレーター - kledgeb https://kledgeb.blogspot.jp/2017/01/windows-3-conemu.html 以下、その他の設定メモ viなどからCtrl+Vでテキストを貼り付けると、複数行でも1行のテキストとして貼り付けられる 以下のように設定すると、複数行のまま貼り付けることができる Settings → keys & Macro → Paste 「Paste mode #2 (Ctrl+V)」で「Multi lines」にする ■SFTPで多段接続 FileZillaは多段接続に対応していないため、踏み台サーバがあると使えない C:\Users\refirio\.ssh\config の設定を使ったり、ポートフォワーディングでアクセスしようとしたが、接続できず 設定できなくは無さそうなので、引き続き要勉強 ポートフォワードを使って踏み台先のサーバにFileZillaでファイル送受信する - C-Production https://c-production.com/8thnote/?p=1626 Windows環境の場合、WinSCPが標準で多段接続に対応しているので、これを使うのが定番になっているみたい 以下のようにすれば接続できたので、いったんWinSCPで対応 (最終的な接続先と踏み台の設定を逆にしないように注意) むしろ、コマンドやポートフォワーディングの知識が無い人でも使えるので、WinSCPを使う方がいいかもしれない 通常の接続: 「ログイン」ウインドウの「セッション」に、接続情報を設定する 鍵を使った接続: 「ログイン」ウインドウの「セッション」に、接続情報を設定する 鍵は「設定 → SSH → 認証 → 認証条件 → 秘密鍵」に設定する 多段接続での接続 「ログイン」ウインドウの「セッション」に、最終的な接続先(踏み台ではない)を設定する 鍵が必要なら「設定 → SSH → 認証 → 認証条件 → 秘密鍵」に設定する 踏み台サーバの情報は「設定 → 接続 → トンネル」に設定する

Advertisement