東京工業大学大学院理工学研究科基礎物理学専攻中村研究室メンバー

ホームページおぼえがき > SSH

SSH

SSHおぼえがき。Debian etchを想定。一度調べたことを、何度も調べるなんて的。
(本おぼえがきは、間違いが多分に含まれるだろう。)

SSH概要

SSH(Secure SHell)は2台の(?)コンピュータ間の通信プロトコル。SSHのサービスを提供するコンピュータをSSHサーバ、SSHサーバに接続するコンピュータをSSHクライアントと呼ぶ?

このプロトコル一つでTelnetとかFTPみたいなことができるっぽい。すなわち、他のパソコンに入り込んだり、他のパソコンからファイルをダウンロードすることが出来る。しかも通信は暗号化されTelnet,FTPより安全?

SSHサーバインストール

SSHサーバプログラムのインストールは以下のコマンドを打つだけでよい気がする。ちなみに、SSHのクライアントプログラムはDebian etchに最初から入ってた気がする。すなわち、sshコマンドは初めから使えた気がしないでもない。

$ su
password: ルートのパスワード入力
# apt-get install openssh-server

デフォルトではセキュリティが不安らしい。設定ファイル/etc/ssh/ssh_configをいじるとよい

ウィンドウを開く設定

sshでほかのパソコンに入り込み、webブラウザとか、PAWとかを立ち上げようとすると、初期設定では"cannot open display: (null)"とエラーメッセージが出て、ウィンドウが開かない。

ウィンドウを開くには、クライアント側の設定を行う。sshコマンドを打った端末を一回閉じ、再び端末を開き$ su とかコマンドを打ってrootユーザーになったら、/etc/ssh/ssh_configを開く。# ForwardX11 noってところの、#を取ってForwardX11 yesに変更。

これで、webブラウザとかPAWとか使える。東工大ポータルサイトにログインしなくても、旭/中村研ネットワーク?に入り込んでブラウザを立ち上げれば、論文が自由に閲覧できるので便利。

トンネルを作る

SSHのポートフォワード機能を用いて、トンネルを作る。これにより、外部ネットワークから、内部ネットーク内のPCにアクセスし直接ファイルをアップロード/ダウンロードできる。

Local_1というPCから、Remote_1を経由し、Remote_2というPCにアクセスすることを考える。Remote_1、Remote_2ではともにsshd(SSH daemon;SSHのサーバープログラム?)が動いていて、それぞれのPCにアカウントを持ってなければならないかも。Remote_1, Remote_2上のアカウントをusername_1, username_2とし、パスワードをpassword_1, password_2とする。rootのパスワードとかは知らなくても大丈夫っぽい。

■ 方法1: Cygwinでトンネル

Local_1にてCygwinを起動し、以下のコマンドを打つ。

$ ssh -L 1234:Remote_2:22 Remote_1 -l username_1	# ポート番号の1234は任意。他の数字でもよい。
username_1@Remote_1's password: username_1のパスワード入力

これで、トンネルができた。$ exitとかコマンドを打つと、トンネルが閉じる。

メモ)

$ ssh -L 1234:Remote_2:22 Remote_1 -l username_1 は、$ ssh -L 1234:Remote_2:22 username_1@Remote_1 と書いてもよいかも?

■ 方法2: Puttyでトンネル

Local_1にてPuttyを起動し、SessionのHost Name(or IP address)ところにRemote_1と入力。Portは22のままにしとく。

次に、Connection - SSH - Tunnelsを選択し、Source port に 1234, Destination に Remote_2:22と入力。したらば、Addボタン、Openボタンを押し、接続開始。ウィンドウが開くので、以下のように入力。

login as: username_1
username_1@Remote_1's password: password_1

これで、トンネルができた。

■ トンネルを使う

トンネルを使い、Local_1から、Remote_2にアクセスするには、Local_1にて、localhost:1234または、127.0.0.1:1234にアクセスすればよい。

localhostとは、自分自身のPCを示す特別なホスト名?127.0.0.1も同様に、自分自身のPCを示す、特別なIPアドレス?1234は前述で用いたポート番号。

例えば、WinSCPでRemote_2にアクセスするには以下のようにする。

  1. まずトンネルが開いた状態(Cygwin,Puttyが起動し、sshコマンドでトンネルが開いた状態)で、winSCPを起動する。
  2. Host Name にlocalhost(127.0.0.1でもよい)、Port numberに1234、User name にusername_2、Passwordにpassword_2を入力し、Loginボタンを押す。
  3. これで、Remote_2にアクセスできる。

ただし、WinSCP自身もポートフォワード機能(?)を持つため、CygwinやPuttyでトンネルを作らなくとも、自前でトンネルを作る。接続方法は、以下のとおり。

  1. Sessionを選択し、Host Name にRemote_2、Port numberに22、User name にusername_2、Passwordにpassword_2を入力する。
  2. Advanced optionsにチェックをしたら、Connection - Tunnelを選択し、Connection through SSH tunnelをチェックする。
  3. Host to setup on tunnelの領域に入力が出来る状態になるので、Host Name にRemote_1、Port numberに22、User name にusername_1、Passwordにpassword_1を入力し、Loginボタンを押す。
  4. Remote_2にアクセスでき、ファイルをアップロード/ダウンロードできる。

本おぼえがきの書体について

書体意味
AaBbCc123端末の表示する文字。またはコードなど。$ You have mail.
AaBbCc123ユーザーが入力する文字。
端末の表示する文字と区別する。
$ su
password:
AaBbCc123コマンドの引数やコードの可変部分。
実際の名前や値と置き換える。
$ rm filename

参考文献・webページ


ページ制作履歴
2007/12/16 制作開始
2007/12/16 webにアップ
2007/12/24 トンネル、ポートフォワード追加