ssh, scp, sftpを使う

[ガラケー版(QRコード)] 総閲覧回数:3,790,022回 / ブログ拍手:2,473
作品DB等各サービスの機能追加情報や、技術系・面白系記事を中心に提供。
記事の投稿は基本Twitterでも告知させて頂いています。
連絡は作品DBの論客の方なら私書、DB外ユーザの方ならメールTwitterで可能です。
アクセス記録[推移 / PV内訳(過去1日 / 過去1週間) / 外部アクセス元 (昨日 / 過去1週間) / ログイン論客足跡]
プロフィール私書(メール)
   /   /送済
評価(一覧   /)
投票   /共:   /
ファン登録
作品/情報/
DB構築()
ブログ
[書く]
攻略記事リンク集
My Play List
<=次の記事 全く注目されていない国際サッカー試合だけど日本決勝進出(翌日優勝)
=>前の記事 ttpと書くことがネチケットかどうかについて

1.
2005/06/15 Linux > セキュリティ > ssh, scp, sftpを使う」
[この書込みのみ表示(記事URL紹介用) / 編集 / 削除 / トラバ送信 / 共有分類に追加(タグ付け)]拍手:2個

1. 文章目的
2. 概略説明
3. Cygwin(Windows上コマンドラインツール)
4. GUIソフト(Windows上クリック操作系ツール) scp, sftp
5. Cygwin以外のWindows上sshクライアント
6. もっとも便利なWindows上のsshクライアント
7. scp
8. ssh
9. sftp
10. rsyncと組み合わせた差分バックアップ
11. サーバー管理者向けの話
12. 開発者・管理者向けの話: パスワードなしのコマンド実行方法について
13. ウェブサーバー上でのアクションをきっかけにリモートサーバーで任意のプログラムを実行するのに活用
14. 唯一の生命線にするのは危険

    1. 文章目的

ウェブサイトを運営している限りファイルの転送、コマンドによるウェブサーバーの操作が必要になる。その時の問題として、ユーザー名・パスワードが暗号化されていない状態でネットワークを通ることである。それが万が一盗み見されてしまうと、ホームページの改竄、破壊行動を行われてしまうことになる。近頃は、こうしたものの流れを盗むフリーウェアも出ている状況ですので、その対策をすることは強くお勧めされます。これを防ぐのに役立つscp, ssh, sftpについて解説します。
    2. 概略説明

sshは、sh、つまりシェルという、遠隔のコンピューターにログインして、遠隔操作するtelnetコマンドに対応する。 ただ、telnetと異なり、ログインとコマンドの実行を、1コマンドで同時に実行できる特徴もあるので、システムの自動化に重宝される。
scpは、遠隔のコンピューターに対して、こちら側のコンピューターからファイルをコピーするコマンド、rcpに対応する。
sftpは、ファイルを遠隔のコンピュータに送る、ftpコマンドに対応する。

機能的には、telnet, rcp, ftpに、それぞれ暗号化機能を追加したものである。
telnet, rcp, ftp暗号化されないで送られるため、近頃だとVectorなどで配られている、パケットフィルタリング系のフリーウェアでその中味を拾われてしまうと、ユーザー名、パスワードを簡単に盗まれてしまう。
一般のユーザーでもこのようなツールは簡単に手に入るし、常時回線をモニタリングしている人には、ログイン系の通信だけ引っこ抜かれることになり、極めて危険である。
traceroute(UNIX上)や、tracert(windows上)でサーバーまでの経路を見てみれば分かるが、そこに至るまで、複数のルーターを経由していることが分かるし、仮に悪意がある人がその経路上に存在すれば、ユーザー名/パスワードは盗み放題である。
単に世の中の人々の善意を期待しているだけでは、いつかは、そのユーザー名とパスワードは盗まれることになるだろう。
そういうことを避けるために、暗号化をした通信をする、ssh, scp, sftpが必要になる。

sftpは、圧縮コピーができるので、普通のftpよりも早く、サイトをコピーすることができる。
scpもファイル転送コマンドであるが、再帰的にデータをコピーすることができる点が、sftpに比べた大きなメリットだ。
自分のPC側に、クライアントとして、scp, sftp, sshをインストールする時には、一気に全て入れられるという点でcygwinがお勧めできる。
    3. Cygwin(Windows上コマンドラインツール)

cygwinはWindows環境に、UNIXで一般的なソフトを使えるようにしてくれる優れものである。
その中にscp, ssh, sftpなどが含まれているのだ。
それに、更に多数の役に立つソフトがあるので、是非インストールしておくと良いと思う。
上級者になった時、きっと役に立つので。
最速一括検索ソフトウェア限定版のOSの部
http://www.accessup.org/find/index2.shtml?download
からダウンロードしてみると良いだろう。
但し、cygwinは全部入れると巨大な量になるため、デフォルトでは最小限のコマンドしか入らず、ssh系はデフォルトではインストールされない。
全部入れる(Full)を選べば簡単だが、選択的に選ぶ場合には、
Category:Net以下にあるopensshという項目に、これらのsecureコマンドは対応しているので、それを選ぶ必要がある。
    4. GUIソフト(Windows上クリック操作系ツール) scp, sftp

ちなみに、速度的に遅く感じてはしまうのだが、GUI系のソフトもある。
コマンドラインでの操作はできないし、しかもUNIX系のコマンドなんて...、という方には良いだろう。
英語版だが、WinScp
http://winscp.net/eng/download.php#download2
というソフトを使うことができる。
基本的には、普通のFTP GUIソフトと同じように使えるが、細かいオプション等に気をつけて、自分にとって最適な走らせ方をする必要がある。
速度的に速くする為には、ファイルサイズを計測しない、更新されたものだけをダウンロードする、というオプションをチェックするのがお勧めである。
ただ、フリーズすることも多くあり、いまいち基本性能として、出来が悪い気はする。
    5. Cygwin以外のWindows上sshクライアント

Tera Termというソフトが多くの場合使われている。
但し、Tera Term本体をインストールして、その後、Tera Term SSH対応パッチを追加するという、作業が必要になる。
Cygwinに対する優位性は、サーバー上のファイルがEUC-JPの時などではないかと思われる。
基本的に、WindowsのCygwinだと、Shift JISで全てを表示しようとするとので、EUC-JPファイルの中身をcatコマンドやviなどで見ようとすると、化けてしまったりする。
Tera Termでは文字コードをShift_JISとEUC-JPで選べるので、この問題を解決できる。
また、同一画面上で表示できる行数をDOSプロンプトより大きく表示できたり、細かい点で、メリットがある。
ただ、文字コードがEUC-JPのファイルの中身をコマンドで見ることが無い限り、必要ないだろう。
本体
http://hp.vector.co.jp/authors/VA002416/
SSHパッチは...
あれ?英語版本家のサイトがなくなっている...?
...
とりあえずミラーしてくれている以下のようなサイトがあるのでそこからダウンロードしましょう。
http://public.planetmirror.com/pub/ttssh/
SSHパッチの適用方法は、本体を解凍・インストールしたディレクトリ(フォルダ)に、上書きする形でSSHパッチのファイル全てを置くだけ。
そしたら、ttssh.exeというファイルから、TeraTermを起動すれば良い。
    6. もっとも便利なWindows上のsshクライアント

今のところあまり有名ではありませんが、
Poderosa(ポデローサ)
http://ja.poderosa.org/
が非常に便利です。
複数のホストに接続したり、接続が切れたら再接続をしたり、といった作業が多いと思いますが、それぞれタブ機能と記憶機能により、問題を解決できます。
一度接続が切れたサーバーに何も打たないで再接続をするには、
オプション設定→ssh→終了までは一度入力したパスフレーズを記憶
を選ぶ必要があります。
Windows上でのssh端末としては、これが一番便利だと思います。
ただし、現在の最新版は文字がダブったりバグが目立ったりするので、バグる状況になったら、もうひとつ前のバージョン(バージョン3)をインストールしてみると良いでしょう。
    7. scp

さて、コマンドライン系の説明に移る。
scpの使い方は以下のようになる。
scp -Cpr コピーするファイル ログインID@サーバー名:ファイルをコピーする場所
例:scp -Cpr find/ user@www.accessup.org:public_html/

# オプションの意味
-C = Compress (圧縮)
-p = preserve (ファイルの属性などをそのまま保持)
-r = recursive (再帰的にサブディレクトリのデータも収集する)
ftpと較べると、セッションの継続性、データコピーの確実性が高いので、圧縮コピーができるというだけでなく、そういう意味でも、例えばサイトの丸ごとバックアップにも最適だ。
man scpと打てば、様々なオプションや、使い方の解説を見ることができる。
但し、UNIX上ではなく、Windows上で使う時には、問題もあり、よくStall(途中で止まってしまうこと)をすることがある。
もう一度やれば大概問題なくできるが、仮に毎日定期的にバックアップさせる等、絶対的な確実性が求められる時には、問題である。
その為、Windows上で、確実性を求める業務に使うには、もっと安定度の高いツールの方がお勧めである。
Windows上で安定して使えるものとしては、 PSCP (= Putty SCP)がお勧めできる。

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
コマンド例:
pscp -r -l $USER -pw $PASSWD $SOURCE_FILE $REMOTE_HOST:$REMOTE_LOCATION

こちらだと、Windows上でもStallすることはない。
但し、オプション項目・形式は異なるので、pscp --helpなどをして、参考にすること。
cygwinのscpとの大きな違いとしては、パスワードをオプションで直接指定できる点が挙げられる。
ちなみに、豆知識として、cygwin(windows版)のscpより、UNIX版のscpの方が遥かに速い。
    8. ssh

sshは、基本的にログインの方法が特殊なことを別とすれば、telnetとログインした後は同じだから、簡単だ。
他も全てそうだけど。
ログインの仕方は以下の通りになる。
ssh -l ユーザー サーバー名
例:ssh -l user www.accessup.org
この後パスワードが聞かれてきて、それに答える。
ちなみに、ログインと同時にコマンドを実行することもできる。
ssh -l ユーザー サーバー名 'コマンド'
例:ssh -l user www.accessup.org 'cd ~/;ls -lF'
    9. sftp

scpが使えないとか、サーバー内でディレクトリを移動しながらファイル指定で送りたい(でも再帰は実装されていない)という場合に役立つ、sftpのコマンドも書いておく。
# ログインの仕方
sftp -C ユーザーID@サーバー名
例:sftp -C user@www.accessup.org

# オプションの意味
-C = Compress (圧縮。以後ファイルの転送は圧縮してから行う)

使えるコマンドはFTPと基本的に同じで、
get ファイル名 # 指定ファイルを取得する
put ファイル名 # 指定ファイルを置く

ちなみに、各コマンド共、ファイルの操作にアスタリスク(*)を使うことができる。
例:scp date* user@www.accessup.org:/example/
date_1.html, date_2.html, date_3.htmlという風に、現在のディレクトリにあるdateでファイル名が始るものが全てコピーされる。
    10. rsyncと組み合わせた差分バックアップ

rsyncを使うと、二つのサーバーの内容を、差分だけ見つけて、同期することができる。
かなりCPU等を使う気もするが、大きなサイトのバックアップに使われることは多い。
このコマンドをssh経由で使うことがよく行われる。
rsyncとsshを組み合わせたバックアップのコマンドは、
rsync --exclude="除外するディレクトリ1" --exclude="除外するディレクトリ2" -ave ssh ユーザー名@バックアップ元のサーバー名:バックアップするディレクトリ ローカルディレクトリ
これで、現在自分がいるディレクトリに、リモートサーバーの内容を同期する形でとってくることができる。
なお、--deleteをオプションとして追加すると、送り元にないファイルは削除される。
    11. サーバー管理者向けの話

SSHのクライアント版は、Windows版に移植されたもので、十分使用できますが、サーバーとしては、配布されているものも、十分な機能が提供されていない、もしくは不安定です。ですので、ここでは、UNIX管理者向けの話とします。ちなみに、UNIX管理者として、一般的な話ですが、rpmなどのパッケージに頼らずに、gccでコンパイルインストールするのが、基本です。でないと、将来応用が利きませんし、重大なバグフィックスのリリースに、時系列的に適応が遅れることになります。
opensshとopensslとzlibを、sshとsshdのためにインストールします。
http://www.gzip.org/zlib/
http://www.openssl.org/
http://www.openssh.org/
一般的にUNIXのインストールでは、READMEまたはINSTALLというファイルを読んで、インストールにおけるオプションがあるかどうかを見て、必要な設定をします。ただ、基本は、root権限で、
# cd ソースディレクトリ;
./congiure # ここでオプションがあることが多い
make; # configureで作られたMakefileの設定に基づいてソースをコンパイル
make install; # コンパイルしたファイルを、システムの定義されたところにファイルを置く
でシステムが構築されます。
この時できる、sshdが、ssh daemon、つまりSSHサーバーとなり、クライアントからのアクセスに対して応答することになるのですが、こうしたサーバー系のプログラムは、コマンドラインから起動するのではなく、サーバー(マシン)が起動すると同じタイミングで、自動起動するように設定するのが普通です。sshdはポート22番を使うサーバーです。
    12. 開発者・管理者向けの話: パスワードなしのコマンド実行方法について

リモートマシン上でコマンドを実行させたり、scpをする時に、手動でやっているのなら、パスワードを打つことが出来るが、タスクやcronなど、自動的に実行させる場合には、パスワードを打つことは出来ない。
そういった自動的な処理に使えるのが、パスワードなしで遠隔のマシンを操作する設定である。

まずクライアント側でdsa方式で暗号化されたssh keyを作る
ssh-keygen -t dsa
# ひたすらリターン

上記処理により生成された、~/.ssh/id_dsa.pubの中身を、パスワード無しでログインしたい遠隔マシンのユーザーのホームディレクトリ内の.ssh/authorized_keys2に追加する。
これにより、scp, sshをする時に、パスワードを聞かれなくなるはずである。
ちなみに、UNIXでは、.が先頭につくディレクトリは、ls -aという-aオプションをつけないと、リストで見ることは出来ない。
気をつけるのは、環境変数等、ログイン時とは違う状態で実行されるということ。
そのため、通常ログイン後に、.bash_profile等、環境変数実行の処理を走らせて、必要な処理をした方が間違いはない。
あと、設定ではまりやすいのが、ファイルの権限が適切なものになっていなければならないということだ。
権限ファイル注釈
rwxr-xr-x/home/$USERGrpやOtherに書き込み権限がなければ良い
rwx------/home/$USER/.ssh 
rw-r--r--/home/$USER/.ssh/authorized_keys2 
rw-------/home/$USER/.ssh/id_dsa 
rw-r--r--/home/$USER/.ssh/id_dsa.pub 
rw-r--r--/home/$USER/.ssh/known_hosts 

なお、Windows上で走るpscpを使う場合には、直接パスワードまでオプションで指定することができる為、このような設定をする必要はない。
社内とかイントラで、セキュリティを気にしなくてもいい場合には、pscpを使うのもありだろう。
実際UNIX上のscpは安定しているが、cygwin上のscpはいまいちで、ファイル転送中にstalledになって、動きが止まってしまうことがよくある。
pscpを使うと、この問題を避けることができる。
PSCPのダウンロードページはこちら。
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
    13. ウェブサーバー上でのアクションをきっかけにリモートサーバーで任意のプログラムを実行するのに活用

別に記事を作ったので(http://www.accessup.org/pj/6_B4C9CDFDBFCDA4B5A4F3/20090118.html)そちらをご参照下さい。
これによりウェブサービスにて複数のサーバーを協働して動かすことが可能になります。
    14. 唯一の生命線にするのは危険

発生条件はセキュリティ対策上、公開できませんが、sshdのバグの為、ログインが蹴られるようになったことがる。
ログイン画面に入る前に、蹴られる。
ホスティングサーバーを利用している私としては、サーバー管理室への唯一の出入り口だ。
まさしく、呆然。
が、バックアップと、HTTPアクセスを駆使して、コンテンツを新サーバーに移住させることに成功した。
一般的にsshdにアクセス手法を限定した方がいいと言われるが、telnetdも、どこのIPアドレスからならアクセスできる、という形で、 アクセス元を限定して、活かしておいた方がいいだろう。
何せ、一つしか道を残さなくなれば、それが壊れれば、全ては終わってしまうのだから。
但し、telnetdは、緊急手段の時のみ使うとはいえ、無制限に公開するのは、避けた方がいい。
結局アクセス手段が増えれば増える程、それだけ、そのソフトにバグがある可能性は増え、侵入されるリスクも増やしてしまうので、接続できるところは限定した方がいい。
どうせ緊急アクセス手段なので。
人が作ったソフトウェア、sshdのような、生命線のようなプログラムであっても、バグが混入することは、想定内にしなければならない。
そして、実際例として、サーバーを捨てなければならないような、致命的なバグも存在するのだから。
そして、今はバグがなくても、ソフトがバージョンアップすれば、バグが混入してくる。
telnetdもsshdも、今までに公開されている中に、緊急度高のバグは幾つもあった。
ちなみに、このバグは、ネット上では、情報を見つけることができなかったし、発生条件も少々特殊なので、現在のバージョンにも存在する可能性が高い(2005/06)。

コメントする2個


[他の記事も読む]
<=次の記事 全く注目されていない国際サッカー試合だけど日本決勝進出(翌日優勝)
=>前の記事 ttpと書くことがネチケットかどうかについて


大分類が「Linux」の記事
この論客の記事全て
上へ ↑上へ 最速検索作品DB皆声