-C では通信を gzip 圧縮します。圧縮通信は ADSL 級以下の低速回線では有効ですが、LAN などの高速通信では大量のデータの圧縮の方に手間取って逆効果になる場合があるので、CPU への負荷も考慮に入れつつ適宜指定してください。さて、初めて接続するサーバの場合は、サーバの公開鍵を ~/.ssh/known_hosts に登録する際に以下のような質問をされますが、問題なければ yes と答えます。更に続いて SSH サーバが以下のようにパスフレーズを聞いてくれば登録成功です。
|
$ ssh cosmos
| The authenticity of host 'cosmos (X.X.X.X)' can't be established.
| RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
| Are you sure you want to continue connecting (yes/no)? yes
| Warning: Permanently added 'cosmos,X.X.X.X' (RSA) to the list of known hosts.
| Enter passphrase for key '/home/junko/.ssh/id_rsa':
|
|
|
パスフレーズによる認証ができない場合は、SSH サーバの設定により、次善の策としてパスワードによる認証をするか、そのまま接続失敗します。
|
$ ssh cosmos
| junko@cosmos's password:
|
|
|
|
$ ssh cosmos
| Permission denied (publickey,keyboard-interactive).
|
|
|
ホスト認証に失敗した場合は、次のような目立つ警告が出ます。サーバの鍵セットが変わったことを知っている場合は、~/.ssh/known_host, ~/.ssh/known_host の中の、そのサーバの公開鍵だけを削除してから再度接続し、新しい公開鍵を登録させましょう。サーバの鍵セットが変わった覚えがない場合は、何物かがそのサーバに「なりすまし」ている可能性もあるので、うかつに接続せずサーバの管理者に問い合わせてください。
|
$ ssh cosmos
| @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
| @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
| @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
| IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
| Someone could be eavesdropping on you right now (man-in-the-middle attack)!
| It is also possible that the RSA host key has just been changed.
| The fingerprint for the RSA key sent by the remote host is
| xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
| Please contact your system administrator.
| Add correct host key in /home/junko/.ssh/known_hosts to get rid of this message.
| Offending key in /home/junko/.ssh/known_hosts:30
| RSA host key for cosmos has changed and you have requested strict checking.
|
|
|
さて、ログインした後はサーバのシェルとの対話になります。ログアウトする場合は exit でログインシェルを抜けます。
ユーザ名を指定すれば、サーバに違うユーザ名でログインできます。(ユーザ名を指定しなければ、現在のユーザ名でログインを試みます)ただし、特にサーバが許している場合以外は root でのログインはできません。
また、コマンドを直接指定して、そのコマンドだけをサーバ機で実行させることもできます。次の例では、サーバのディスク容量をチェックしています。
|
client:$ ssh hostname df ↓ このコマンドは SSH サーバ機で実行
| Filesystem 1k-blocks Used Available Use% Mounted on
| /dev/sda1 4016088 1767132 2248956 45% /
| /dev/sda2 32125200 6077056 26048144 19% /home
|
| client:$ ← このプロンプトは SSH クライアント機が出力
|
|
|
SSH では、X プロトコルの転送もできます(設定により禁止することもできます)。X プロトコルの転送を使うと、SSH サーバの X アプリのウィンドウを手元の SSH クライアントのデスクトップに表示することができます。クライアントでは -X オプションの指定が必要です。
|
client:$ ssh -X hostname xosview
|
|
|
scp は SSH の暗号化通信を使ってファイルコピーを行う、rsh のセキュリティ強化版コマンドです。
|
$ scp [-p] [-r] [-C] <ユーザ名>コピー元(複数可)> <コピー先>
|
|
|
|
|
コピー元のタイムスタンプ・所有者・パーミッションを保持
|
|
|
コピー元やコピー先は [<ユーザ>@][<ホスト>:]<パス> の形式で指定します。例えば tobiume にユーザ名 sayuri でログインし、/tmp/report.txt を自分のマシンのホームディレクトリに scp する場合は次のようにします。
|
$ scp sayuri@tobiume:/tmp/report.txt ~
|
|
|
sftp は、ftp と同様の操作感で暗号化ファイル転送を行うコマンドです。ただし、あまり高機能ではなく、ssh と scp の連携でファイルの確認と転送はできることもあるので、出番は多くないかもしれません。
|
$ sftp [-C] [<user>@]<hostname>
|
|
|
rsync は、内部的に ssh, scp を利用してディレクトリ以下の内容を同一にします。rsync を使ってミラーリングやバックアップをすることができます。ここまで rsh, rcp の SSH 版として ssh, scp を紹介してきましたが、ssync (?) というコマンドはないので注意してください。
|
$ rsync [<オプション>] <コピー元 (複数可)> <コピー先>
|
|
|
|
|
デバイスファイル属性を保持 (要 root 権限)
|
|
|
|
|
所有者・所有グループを保つ (-o は要 root 権限)
|
|
|
|
|
-rlpogtD と等しい (要 root 権限)
|
|
|
|
|
コピー元でファイルシステムをまたがった処理をしない
|
|
|
「〜を保ってコピー」とは、コピー元のファイルと同じ属性をコピー先でも設定することを意味します。例えば、同じファイルを単純にrsync, rsync -og, rsync -t の 3 通りでコピーすると次のようになります。
|
# ssh tobiume ls -l /tmp/report.txt
| -rw-r--r-- 1 junko users 12345 Sep 8 07:06 report.txt
| # rsync tobiume:/tmp/report.txt .
| # ls -l file1
| -rw-r--r-- 1 root root 12345 Nov 11 11:11 report.txt
| # rsync -og tobiume:/tmp/report.txt .
| # ls -l file1
| -rw-r--r-- 1 junko users 12345 Nov 11 11:11 report.txt
| # rsync -t tobiume:/tmp/report.txt .
| # ls -l file1
| -rw-r--r-- 1 root root 12345 Sep 8 07:06 report.txt
|
|
|
シンボリック属性の保持も原理は同じです。-l ではシンボリックリンクのままコピーされますが、-L ではリンクが指していたファイルとしてコピーされています。
|
# ssh tobiume ls -l /tmp/r*
| lrwxrwxrwx 1 junko users 10 Sep 8 07:06 readme
| -> report.txt
| -rw-r--r-- 1 junko users 68030 Sep 8 07:06 report.txt
| # rsync -l tobiume:/tmp/r* .
| lrwxrwxrwx 1 junko users 10 Nov 11 11:11 readme
| -> report.txt
| -rw-r--r-- 1 junko users 68030 Nov 11 11:11 report.txt
| # rsync -L tobiume:/tmp/r* .
| -rw-r--r-- 1 junko users 68030 Nov 11 11:11 readme
| -rw-r--r-- 1 junko users 68030 Nov 11 11:11 report.txt
|
|
|
-H も仕組みは同様で、同じファイルの実体を 2 つの名前がハードリンクしている場合、コピー先でもこの状態を保ちます。
ただし、処理が遅くなるので必要な場合だけ指定するのがよいでしょう。
-D では、コピー元がデバイスファイルならば、コピー先でも同じデバイスファイルを作ります。
-x では、コピー元のあるファイルシステム以外の部分はコピー対象外になります。例えば rsync -xr / cosmos:/backup とすると、/ と違うファイルシステムである /proc 以下はコピーされません。
SSH を使いこなすようになってくると、1 日に何十回もの ssh, scp の度のパスフレーズの入力が面倒になります。これを解消するために、前もって ssh-agent, ssh-add というコマンドでユーザ秘密鍵を記憶させておいて、毎回の入力を省略できるようにする方法があります。
|