FreeBSD QandA 1779

FreeBSD QandA

Q. Web ページの更新のためにインターネットから安全に ftp で接続すべく、
   ssh の port forwarding を使おうと思ってはまりました。パスワードは
   暗号化に成功しますが、データ転送の暗号化がうまくできません。

A. クライアント側の OS によって以下のような方法があります。

    1) Unix
     普通の ftp(1)ssh(1) の TCP port forwarding でちゃんと動かすのは
     面倒なので、hsftp(1) か sftp(1) を使うのがいいでしょう。FreeBSD では、
     どちらも Ports Collection の ports/ftp/hsftp 及び ports/ftp/sftp にあ
     ります。

     hsftp(1) は、内部で ssh(1)scp(1) のフロントエンドとして働き、コピー
     などのコマンドは、ftp(1) とほとんど同じです。ただし ssh-agent(1) など
     を使って、scp(1) をパスワード(パスフレーズ)の入力なしに実行できるよう
     にしておく必要があります。

     sftp(1) も hsftp とほぼ同様ですが、リモート側に sftpserv というプログ
     ラムが必要になります。もし、リモート側にインストールされてなければ、
     交渉して入れてもらうか自分で用意しましょう。なお、OpenSSH についてくる
     sftp-server(8) は SSH Communications Security 社 の ssh (いわゆる
     「本家ssh」) バージョン2 についてくる sftp に対応するためのもので、
     ports/ftp/sftp についてくる「sftp サーバ」(sftpserv) とは別物です。
     FreeBSD 4.2R からは付属しますが互換性はありません。ややこしいのは、
     どちらも「sftp」を名乗っていることです。

     ftp と比べるとサポートされているコマンドは少ないですが、

      sftp> help
      Supported commands are:
      ?       help    open    close   get     mget    put     mput
      cd      pwd     ls      dir     mdir    mkdir   rmdir   rename
      rm      delete  mdelete lcd     exec    quit    exit    bye
      binary  ascii   image   version

     これぐらいのコマンドが使えます。これは、hsftp でもだいたい同じです。
     また、ports/net/rsync を ssh 経由で使えばディレクトリの内容をまとめて
     アップデートすることができます。

      % rsync -auzvC --delete --rsh=ssh . user@server:public_html

    2) Java
     MindTerm を使えば,FTP-tunneling は簡単に出来ます。もちろん、Control
     port (21/tcp) だけでなく Data port (default:20/tcp) も SSH 経由になり
     ます。SCP の機能も入っているので,そちらを使ってもいいですが、Web ページ
     の更新には FTP が使えたほうが便利です。 

      <URL:[moved?] http://www.appgate.org/products/mindterm/>

     v1.2.1 までのライセンスは GPL ですが,v2 以降が GPL になるかどうか決まっ
     ていないようです。v2 以降は SSH2 に対応します。2000年12月現在 v1.9.9pre2
     が、バイナリのみ公開されています。

     JAVA でインプリメントされているので,java1.1 以降に対応した JVM があれ
     ば OS は問いません。こちらでは,Linux, Windows, Macintosh で動作する
     ことを確認しています。

    3) Windows
     現在では MindTerm を使うのが一番簡単そうな方法ですが、TeraTermPro に 
     ttssh を組み合わせた環境では、scp 機能がないため次のような方法が用いら
     れてきました。

    3-a) 単純に scp をインストールして済ます。
      <URL:http://www.jaist.ac.jp/~uchida-t/ssh/>
      <URL:http://bmrc.berkeley.edu/people/chaffee/winntutil.html#sshnt>

    3-b) Delegate を併用する方法です。
     次の Web ページが TeraTerm + ttssh の使い方として、よくまとまってると
     思います。この中で ftp については「書かないけど」の部分ですね。
      <URL:http://www.netlab.is.tsukuba.ac.jp/~one/ssh/#H>

     以下に [FreeBSD-users-jp 49239] を元に説明します。hostA がローカル側、
     hostB がリモートホスト、[a],[b] は Unix では 1024 以上の空いてる port 
     ですが、Windows では 1024 の制限はないようです。以下の説明では [a]=21, 
     [b]=8021 としています。

      hostA> ssh -L [a]:localhost:[b] -L [b-1]:localhost:[b-1] hostB
       o メニューバー Setup → SSH Forwarding で以下のように設定
            Local 21 to remote "localhost" port 8021
            Local 8020 to remote "localhost" port 8020
       o hostA から hostB に ttssh でログイン

      hostB> delegated -P[b] SERVER=ftp://localhost:21/ RELIABLE=localhost
       o hostB のプロンプトで delegated を実行
         % delegated -P8021 SERVER=ftp://localhost:21/ RELIABLE=localhost

      hostA> ftp -p localhost [a]
       o hostA から localhost の port 21 に passive (PASV) モードで ftp 接続

     Delegate は passive mode だと [b-1] にデータ転送用の port を用意して
     くれるようです。このスレッドには書いてませんが、セキュリティ的には 
     delegated のオプションに TIMEOUT=900 ぐらいはつけておいたほうが吉だと
     思います。

    4) おまけ

     SSL 対応の wu-ftp です。
      <URL:http://www.average.org/ftp/wuftp+SSL/>

     下記の URL に SSL 関係のリンク集がまとまっています。
      <URL:http://www.infoscience.co.jp/technical/openssl/related/apps.html>

     あと、ssh ではないですが Zebedee というのもあります。
      <URL:http://www.winton.org.uk/zebedee/>
      <URL:[BROKEN!] http://www.arekore.org/zebedee/>

同一グループへのリンク

グループ名: ssh


間違い・追加情報を見付けた場合は、 修正案の投稿のしかた を読んだ上で、
QandA@jp.FreeBSD.org まで お知らせください。