わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

sshコマンド1回で,多段リモートログインとプロキシ

目標

計算機がとりあえず3つあります.
今使っているマシンはpcです.具体的にはWindows + Cygwinですが,あとで,Ubuntuのシェルに変わったりもします.
最終的にリモートログインしたいサーバは,server2という名前です.ちなみにUbuntuの8.10です.server2ではWebサーバを起動していまして,開発版のWebアプリケーションがあります.pcからアクセスし,不具合があれば,その場でスクリプトファイルや設定ファイルなどの修正もできるようにします.
server2にはアカウントはありますが,直接リモートログインができません.
なのですが,3番目の計算機としてserver1というのがあり,そこにはpcから直接,sshで入れます.ちなみにDebianetchです.server1からserver2へ,sshでリモートログインもできます.なので,sshコマンドを2回実行すれば行けますが,なんとも手間です.
ということで,

  • pcから,1個のsshコマンドで,server1を経由してserver2にログインし
  • ログイン中は,pcから,ブラウザでserver2にアクセスできる

ことを目指すことにします.

サーバの設定

server1に,ncまたはnetcatのコマンドがあることを確認します.具体的には

server1$ which nc
server1$ which netcat

なければ,入れます.DebianUbuntuなら

server1# apt-get install netcat

で入ります.
ちょっと脱線.Ubuntuでは/bin/ncと/bin/netcatが作られますが,いずれも,/etc/alternatives/ncを経由して,/bin/nc.traditionalへのシンボリックリンクになっています.脱線おしまい.
次に,server1,server2にそれぞれsshでログインするための設定をします.pcで鍵ペアを作っておき,公開鍵を,server1,server2それぞれの~/.ssh/authorized_keysに追記しておきます.

SSHの設定

pcの~/.ssh/configに,以下のとおり書き込みます.

Host server1
  Hostname [server1のFQDNもしくはIPアドレス]
Host server2
  Hostname [server2のIPアドレス]
Host Server2
  ProxyCommand ssh server1 nc [server2のIPアドレス] 22
  DynamicForward 127.0.0.1:8080

「Host server2」とその次の行の記述は,なくてもかまいません(pcから「ssh server2」と実行しません)が,「ssh Server2」との違いを明確するために,入れています.
肝心なのは「Host Server2」から始まる3行です.「nc」は「netcat」に置き換えるべきかもしれません.「8080」は,pcで空いている任意のポート番号でかまいません.ちなみに「127.0.0.1」は固定で,これは(server1でもserver2でもなく)pcのことです.
IdentityFileやUserなど,他の設定も書けます.

1コマンドで多段リモログ

pc$ ssh Server2

を実行し,server2に入れることを確認します*1
2度目の脱線.「リモログ」はremote loginの省略形であり,リモログPRO・リモログASPとは一切関係ありません.脱線おしまい.
これで長時間おいていると,ログインが切れるという場合,「top」でも実行しておくといいでしょう.top実行中,1キーでマルチコアかどうかが分かり,qキーで終了です.

Firefoxで動作確認

まずFirefoxSwitchProxy Toolのアドオンを入れます.
あとは過去に書いているのを引用…

  • Firefoxを起動し,メニューの「ツール / アドオン」から,SwitchProxyの設定画面を出します.
  • 「プロキシ管理」のボタンを押します.
  • 「追加」のボタンを押します.「プロキシの種類を選択」には,単に「次へ」のボタンを押します.
  • プロキシ情報のところで,以下の情報を入力します.
    • プロキシ名は,適当な名前
    • SOCKプロキシの横に,「127.0.0.1」.その横に,「8080」

  • OKを押して登録します.
http://d.hatena.ne.jp/takehikom/20080117/1200520388

設定のポップアップ(Switch Proxy Options)の中の「Show in Status Bar」にチェックをしておくと,プロキシ変更が簡単になります.
設定を終え,プロキシをD8080に変更してから,「http://[server2のIPアドレス]/パス」にアクセスできることを確認します.

w3mで動作確認

sshでSOCKSプロキシ - 技術メモ帳にヒントを得て,pcをあるUbuntuマシンとし,シェルから,アクセスできるようにしました.

pc# apt-get install tsocks
pc$ cat > ~/.tsocks.conf
server = 127.0.0.1
server_port = 8080
server_type = 5
pc$ ssh Server2
pc$ tsocks w3m http://[server2のIPアドレス]/パス

あらかじめ調査したいくつかのページでは,/etc/tsocks.confに書くものばかりでしたが,これだとroot権限が必要な上に,マルチユーザで使用する際に苦労します.~/.tsocks.confが使えるのは,tsocks(8)の中に,『... it consults the configuration file (which is defined at configure time but defaults to ~/.tsocks.conf and if that file cannot be accessed, to /etc/tsocks.conf) ...』とあることから確認できます.

*1:ログインメッセージやプロンプトで,server2のシェルにいるかどうか分からなければ,「hostname」を実行します.