第6章 ネットワークアプリケーション

# 第6章 ネットワークアプリケーション

ネットワーク接続を確立した (5章ネットワークの設定を参照下さい) あとで、各種のネットワークアプリケーションを実行できます。

| ヒント
現代的な Debian に特化したネットワークインターフェースのガイドは、 The Debian Administrator's Handbook — Network Infrastructure を参照下さい。

| ヒント
もしどこかの ISP で "2段階認証" を有効にした場合、あなたのプログラムから POP や SMTP サービスにアクセスするアプリケーションパスワードを入手する必要があります。事前にあなたのホスト IP を許可する必要があるかもしれません。

## 6.1. ウェッブブラウザー

多くのウェッブブラウザーパッケージがハイパーテキストトランスファープロトコル (HTTP) を使って遠隔コンテントにアクセスするために存在します。

表6.1 ウェッブブラウザーのリスト

パッケージ | ポプコン | サイズ | タイプ | ウェッブブラウザーの説明
--- | --- | --- | --- | ---
`chromium` | V:30, I:103 | 286985 | X | Chromium、(Google からのオープンオースブラウザー)
`firefox` | V:15, I:21 | 277820 | , , | Firefox, (Mozilla からのオープンソースのブラウザー、 Debian Unstable でのみ入手可能)
`firefox-esr` | V:214, I:442 | 266490 | , , | Firefox ESR, (Firefox 延長サポートリリース)
`epiphany-browser` | V:2, I:11 | 2258 | , , | GNOME、HIG 準拠、Epiphany
`konqueror` | V:27, I:116 | 7861 | , , | KDE、Konqueror
`dillo` | V:0, I:4 | 1585 | , , | Dillo, (軽量ブラウザー, FLTK 準拠)
`w3m` | V:11, I:145 | 2853 | テキスト | w3m
`lynx` | V:29, I:457 | 1972 | , , | Lynx
`elinks` | V:2, I:16 | 1791 | , , | ELinks
`links` | V:2, I:21 | 2321 | , , | Links (テキストのみ)
`links2` | V:0, I:10 | 5466 | グラフィクス | Links (X を使わないコンソールグラフィクス)

### 6.1.1. User-Agent 文字列をスプーフィングする

一部の過剰な制約を課すウエッブサイトにアクセスするには、ウエッブブラウザー プログラムが返すUser-Agent 文字列をスプーフィングする必要があるかもしれません。以下を参照下さい:

- MDN Web Docs: userAgent
- Chrome Developers: Override the user agent string
- How to change your user agent
- How to Change User-Agent in Chrome, Firefox, Safari, and more
- How to Change Your Browser’s User Agent Without Installing Any Extensions
- How to change the User Agent in Gnome Web (epiphany)

| 注意
偽装されたユーザーエージェント文字列は Java に対して良からぬ副次効果を引き起こすかもしれません。

### 6.1.2. ブラウザー拡張

全ての現代的な GUI ブラウザーはソースコードを使う ブラウザー拡張 をサポートしていて、ウエッブ拡張として標準化されつつあります。

## 6.2. メールシステム

本セクションは消費者用インターネット接続上の典型的モービルワークステーションにフォーカスします。

| 注意
もしインターネットと直接メール交換するメールサーバーを設定するなら、このような初歩的文書が不要なぐらいシステムを熟知しているべきです。

### 6.2.1. Eメールの基本

email メッセージは、メッセージのエンベロープ(封筒)と、メッセージのヘッダーと、メッセージの本体との、3 構成要素から成り立っています。

- メッセージエンベロープ中の "To" (宛先)と "From" (差出人) 情報は SMTP が電子メールを配達するのに用いられます。(メッセージエンベロープの "From" 情報は バウンスアドレス、 From_、 等とも呼ばれます。)

- メッセージヘッダー中の "To" (宛先)と "From" (差出人) 情報は email クライアント が email を表示するのに用いられます。(これらはメッセージエンベロープの情報と共通のことがよくありますが、必ずしもそうとは限りません。)

- ヘッダーやボディーデーターを包含する電子メールのメッセージの書式は、多目的インターネットメール拡張 (MIME) を持ちいて、プレーンな ASCII テキストから他の文字エンコーディングに、またオーディオやビデオや画像アプリケーションプログラムに拡張されています。

フル機能の GUI を使った 電子メールクライアントは GUI を使った直感的な設定を使い以下の全機能を提供します。

- コンテントのデータータイプやエンコーディングを扱いメッセージヘッダーやボディーのデーターは多目的インターネットメール拡張 (MIME) を持ちいて解釈されます。

- 旧来の基本アクセス認証か 現代的な OAuth 2.0 を用いて ISP の SMTP や IMAP サーバーから認証をうけます。(OAuth 2.0 に関しては、デスクトップ環境経由で設定します。例えば "Settings" -> "Online Accounts".)

- メッセージ サブミッションポート (587) を聞いている ISP のスマートホスト SMTP サーバーにメッセージを送ります。

- TLS/IMAP4 ポート (993) から ISP のサーバー上に保存されたメッセージを受け取ります。

- 属性によってメールのフィルタリングができます。

- 連絡先、カレンダー、タスク、メモといった追加の機能を提供することがあります。

表6.2 メールユーザーエージェント (MUA) のリスト

パッケージ | ポプコン | サイズ | タイプ
--- | --- | --- | ---
`evolution` | V:28, I:240 | 492 | X GUI プログラム (GNOME、グループウエアスイート)
`thunderbird` | V:46, I:109 | 274692 | X GUI プログラム (GTK、Mozilla Thunderbird)
`kmail` | V:43, I:107 | 25212 | X GUI プログラム (KDE)
`mutt` | V:11, I:94 | 7118 | きっと `vim` とともに使われるキャラクターターミナルプログラム
`mew` | V:0, I:0 | 2319 | `(x)emacs` の下でキャラクターターミナルプログラム

### 6.2.2. 現代的なメールサービスの制約

スパム（迷惑メール）問題にさらされるのを最小化するために、現代的なメールサービスには様々な制約があります。

- 確実にメールをリモートホストに直接送るために消費者用インターネット接続上で SMTP サーバーを実行するのは現実的ではありません。

- メールは可能な限り真正に見えない限り、送付先に到達する途中のどこかのホストによって黙って拒否されるでしょう。

- 無関係の複数の送信元メールアドレスのメールを、単一のスマートホストを使って確実にリモートホストに送ることを期待するのは現実的ではありません。

なぜなら:

- 消費者用インターネット接続からインターネットへのSMTP ポート (25) 接続はブロックされます。

- 消費者用インターネット接続されたホストへのインターネットからのSMTP ポート (25) 接続はブロックされます。

- 消費者用インターネット接続されたホストからインターネットへの送信メッセージはメッセージ サブミッションポート (587) 経由でのみ送れます。

- ドメインキー アイデンティファイド メール (DKIM) や SPF 認証 や ドメインベースのメッセージ認証、報告および適合 (DMARC) のような アンチスパムテクニック が email のフィルタリング に広範に使用されています。

- ドメインキー アイデンティファイド メールサービスがあなたのメールをスマートホスト経由で送信する際に提供されているかもしれません。

- Eメールアドレスのなりすましを防ぐために、スマートホストによってメッセージヘッダ内の送信元メールアドレスがスマートホストのメールアカウントに書き換えられることがあります。

### 6.2.3. 歴史的なメールサービスへの期待

Debian 上のいくつかのプログラムは、UNIX システム上のメールサービスが歴史的に以下のように機能したため、デフォルト設定でもカスタマイズ設定でも `/usr/sbin/sendmail` コマンドにアクセスして以下のようにして電子メールを送ることを期待します:

- 電子メールがテキストファイルで作成されます。

- 電子メールが `/usr/sbin/sendmail` コマンドに引き渡されます。

- 同一ホスト上の送り先アドレスの場合、`/usr/sbin/sendmail` コマンドは `/var/mail/$username` ファイルに電子メールを追記することで電子メールのローカル配達をします。

  - このような機能を期待しているコマンド: `apt-listchanges`, `cron`, `at`, ...

- リモートホスト上の送り先アドレスの場合、`/usr/sbin/sendmail` コマンドは DNS の MX レコードから見つかる送り先ホストに SMTP を用いて電子メールを配達をします。

  - このような機能を期待しているコマンド: `popcon`, `reportbug`, `bts`, ...

### 6.2.4. メール転送エージェント (MTA)

Debian のモービルワークステーションは、Debian 12 Bookworm 以降 メール転送エージェント (MTA)を使わず、フル機能の GUI を使った 電子メールクライアント だけで設定可能です。

Debian は伝統的に、 `/usr/sbin/sendmail` コマンドを期待するプログラムのために何らかの MTA プログラムをインストールしました。モービルワークステーション上のそのような MTA は「現代的なメールサービスの制約」や「歴史的なメールサービスへの期待」に対処しなければいけません。

モービルワークステーションでは、MTA の典型的選択肢は インストールオプションとして "Mail sent by smarthost; received via SMTP or fetchmail" 等を選択した `exim4-daemon-light` か `postfix` です。これらの軽量 MTA は "`/etc/aliases`" を尊重します。

| ヒント
`exim4` を設定して複数の送信元メールアドレスに対応する複数のスマートホストを経由してインターネットメールを送ることは簡単ではありません。特定のプログラムためにそのような機能が必要な場合には、複数の送信元アドレスを簡単に設定できる `msmtp` を設定し使用しましょう。そして、MTA は単一送信元アドレスだけのままにしましょう。

表6.3 基本的なメール転送エージェント関連パッケージのリスト

パッケージ | ポプコン | サイズ | 説明
--- | --- | --- | ---
`exim4-daemon-light` | V:219, I:226 | 1649 | Exim4 メール転送エージェント (MTA: Debian のデフォルト)
`exim4-daemon-heavy` | V:5, I:5 | 1814 | Exim4 メール転送エージェント (MTA: 柔軟な代替候補)
`exim4-base` | V:225, I:231 | 1646 | Exim4 文書 (text) と共通ファイル
`exim4-doc-html` | I:1 | 3798 | Exim4 文書 (html)
`exim4-doc-info` | I:0 | 648 | Exim4 文書 (info)
`postfix` | V:106, I:112 | 4003 | Postfix メール転送エージェント (MTA: セキュアな代替候補)
`postfix-doc` | I:4 | 4841 | Postfix 文書 (html+text)
`sasl2-bin` | V:4, I:10 | 368 | Cyrus SASL API の実装 (SMTP AUTH について postfix を補完)
`cyrus-sasl2-doc` | I:0 | 2142 | Cyrus SASL - 文書
`msmtp` | V:7, I:13 | 811 | 軽量 MTA
`msmtp-mta` | V:5, I:7 | 136 | 軽量 MTA (`msmtp` の sendmail 互換性拡張)
`esmtp` | V:0, I:0 | 123 | 軽量 MTA
`esmtp-run` | V:0, I:0 | 27 | 軽量 MTA (`esmtp` の sendmail 互換性拡張)
`nullmailer` | V:7, I:8 | 483 | 超軽量 MTA、ローカルメール無し
`ssmtp` | V:4, I:6 | 133 | 超軽量 MTA、ローカルメール無し
`sendmail-bin` | V:10, I:11 | 1959 | 高機能 MTA (既に慣れている場合)
`courier-mta` | V:0, I:0 | 2674 | 超高機能 MTA (ウェブインターフェースなど)
`git-email` | V:0, I:10 | 1187 | パッチの集合の email として送信する `git-send-email`(1) プログラム

#### 6.2.4.1. exim4 設定

スマートホスト経由のインターネットメールに関しては、`exim4-*` パッケージを以下のように (再)設定します。

    $ sudo systemctl stop exim4
    $ sudo dpkg-reconfigure exim4-config

"General type of mail configuration" に関して、"スマートホストでメール送信; SMTP または fetchmail で受信する" を選択します。

"System mail name:" をそのデフォルトである FQDN (「ホスト名の解決」を参照下さい) に設定します。

"IP-addresses to listen on for incoming SMTP connections:" をそのデフォルトである "127.0.0.1 ; ::1" と設定します。

"Other destinations for which mail is accepted:" の内容を消去します。

"Machines to relay mail for:" の内容を消去します。

"送出スマートホストの IP アドレスまたはホスト名:" を"smtp.hostname.dom:587" と設定します。

"Hide local mail name in outgoing mail?" に対して "No" を選択します。(この代わりに、「メールアドレス設定」にある "`/etc/email-addresses`" を使用します。)

"DNS クエリの数を最小限に留めますか (ダイヤルオンデマンド)?" に以下の内のひとつの返答をします。

- ブート時にインターネットに接続されている場合は、"No" とします。

- ブート時にインターネットに接続されていない場合は、"Yes" とします。

"Delivery method for local mail:" を"mbox format in /var/mail/" と設定します。

"Split configuration into small files?:" に対して "Yes" を選択します。

"`/etc/exim4/passwd.client`" を編集しスマートホストのためのパスワードエントリーを作成します。

    $ sudo vim /etc/exim4/passwd.client
     ...
    $ cat /etc/exim4/passwd.client
    ^smtp.*\.hostname\.dom:username@hostname.dom:password

"`/etc/default/exim4`" 中で "`QUEUERUNNER='queueonly'`" や "`QUEUERUNNER='nodaemon'`" 等と設定しシステムリソースの消費を最小限とした `exim4`(8) (optional)

以下のようにして `exim4` を起動します。

    $ sudo systemctl start exim4

"`/etc/exim4/passwd.client`" 中のホスト名はエイリアスであってはいけません。真のホスト名は以下のようにして確認できます。

    $ host smtp.hostname.dom
    smtp.hostname.dom is an alias for smtp99.hostname.dom.
    smtp99.hostname.dom has address 123.234.123.89

エイリアス問題を回避するために "`/etc/exim4/passwd.client`" の中に正規表現を用いています。もし ISP がエイリアスで示されるホストを移動させても SMTP AUTH はおそらく動きます。

以下のようにすれば `exim4` の設定を手動で更新できます。

- "`/etc/exim4/`" 中の `exim4` 設定ファイルの更新。

  - MACRO を設定するために "`/etc/exim4/exim4.conf.localmacros`" を作成し 、"`/etc/exim4/exim4.conf.template`" を編集します。(非分割設定)

  - "`/etc/exim4/exim4.conf.d`" サブディレクトリー中で、新規ファイルを作成したり既存ファイルを編集したりします。(分割設定)

- "`systemctl reload exim4`" を実行します。

| 注意
"DNS クエリの数を最小限に留めますか (ダイヤルオンデマンド)?" という debconf の質問に "No" (デフォールト値) が選ばれシステムがブート時にインターネットに繋がっていない場合、`exim4` の起動は長い時間がかかります。

次に示す正式のガイドを読んで下さい: "`/usr/share/doc/exim4-base/README.Debian.gz`" と `update-exim4.conf`(8)。

| 警告
現実的な各種配慮から、ポート 587 上で STARTTLS を用い SMTP を用いるか、ポート 25 上の プレーンの SMTP の代わりのポート 465 上の SMTPS (SSL使用のSMTP) を用いています。

#### 6.2.4.2. SASL を使う postfix の設定

スマートホスト経由のインターネットメールに関しては postfix 文書と重要マニュアルページを読むことから始めるべきです。

表6.4 重要 postfix マニュアルページのリスト

コマンド | 機能
--- | ---
`postfix`(1) | Postfix コントロールプログラム
`postconf`(1) | Postfix の設定ユーティリティー
`postconf`(5) | Postfix 設定パラメーター
`postmap`(1) | Postfix 検索テーブルのメンテナンス
`postalias`(1) | Postfix エイリアスデーターベースのメンテナンス

`postfix` と `sasl2-bin` パッケージを以下のように (再)設定します。

    $ sudo systemctl stop postfix
    $ sudo dpkg-reconfigure postfix

"スマートホストを使ってインターネット" を選択します。

"SMTP リレーホスト (なければ空):" を "`[smtp.hostname.dom]:587`" と設定します。

    $ sudo postconf -e 'smtp_sender_dependent_authentication = yes'
    $ sudo postconf -e 'smtp_sasl_auth_enable = yes'
    $ sudo postconf -e 'smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd'
    $ sudo postconf -e 'smtp_sasl_type = cyrus'
    $ sudo vim /etc/postfix/sasl_passwd

スマートホストのパスワードエントリーを作成します。

    $ cat /etc/postfix/sasl_passwd
    [smtp.hostname.dom]:587     username:password
    $ sudo postmap hush:/etc/postfix/sasl_passwd

次に記すように `postfix` を起動します。

    $ sudo systemctl start postfix

`dpkg-reconfigure` ダイアログと "`/etc/postfix/sasl_passwd`" の中で "`[`" と "`]`" を使うことで MX レコードを確認せずに指定された hostname その物を直接使うように確実にします。"`/usr/share/doc/postfix/html/SASL_README.html`" の中の "Enabling SASL authentication in the Postfix SMTP client" を参照下さい。

#### 6.2.4.3. メールアドレス設定

メールのトランスポートとデリバリーとユーザーのエージェントが使うメールアドレス設定ファイルが少々存在します。

表6.5 メールアドレス関連のファイルのリスト

ファイル | 機能 | アプリケーション
--- | --- | ---
`/etc/mailname` | (送出)メールのデフォールトのホスト名 | Debian 固有、`mailname`(5)
`/etc/email-addresses` | 送出メールのホスト名の偽装 | `exim`(8) 固有、`exim4-config_files`(5)
`/etc/postfix/generic` | 送出メールのホスト名の偽装 | `postfix`(1) 固有、`postmap`(1) コマンド実行後アクティベートされます。
`/etc/aliases` | 受入メールのためのアカウント名のエイリアス | 一般的、`newaliases`(1) コマンド実行後アクティベートされます。

通常 "`/etc/mailname`" ファイル中の mailname はホストの IP の一つとして解決できる完全修飾ドメイン名 (FQDN) です。解決できる IP アドレスのあるホスト名を持たない可動ワークステーションの場合には、この mailname を "`hostname -f`" に設定します。(これは `exim4-*` と `postfix` の両方に有効な安全な選択肢です。)

| ヒント
"`/etc/mailname`" の内容は多くの MTA 以外のプログラムによってそのデフォールト挙動のために使われます。`mutt` の場合、`~/muttrc` ファイル中の "`hostname`" と "`from`" 変数を設定して mailname の値をオーバーライドします。`bts`(1) や `dch`(1) 等の `devscripts` パッケージ中のプログラムの場合、環境変数の "`$DEBFULLNAME`" や "`$DEBEMAIL`" をエキスポートしてその値をオーバーライドします。

| ヒント
普通 `popularity-contest` パッケージは root アカウントからメールを FQDN 付きで送信します。`/usr/share/popularity-contest/default.conf` に記載された様に `/etc/popularity-contest.conf` 中に `MAILFROM` を設定する必要があります。こうしないと、smarthost の SMTP サーバーによってあなたのメールは拒否されます。少々面倒ですが、root からの全メールの発信元を書き替えるより、この方法は安全ですし、他のデーモンや cron スクリプトに関してもこの方法を適用するべきです。

mailname を"`hostname -f`" と設定した時には、次によって MTA で発信元メールアドレスを偽装することが実現できます。

- `exim4`(8) の場合、`exim4-config_files`(5) に説明されているように "`/etc/email-addresses`"

- `postfix`(1) の場合、`generic`(5) に説明されているように "`/etc/postfix/generic`"

`postfix` の場合、次に記す追加ステップが必要です。

    # postmap hash:/etc/postfix/generic
    # postconf -e 'smtp_generic_maps = hash:/etc/postfix/generic'
    # postfix reload

あなたのメール設定は以下のようにするとテストできます。

- `exim`(8) の場合、`-brw, -bf, -bF, -bV, …` オプションを使用

- `postmap`(1) の場合、`-q` オプションを使用

| ヒント
Exim には`exiqgrep`(8) や `exipick`(8) のようないくつかのユーティリティープログラムが同梱されています。利用可能なコマンドは "`dpkg -L exim4-base|grep man8/`" を参照下さい。

#### 6.2.4.4. 基本的な MTA の操作

基本的な MTA 操作が存在します。その一部は `sendmail`(1) 互換性インターフェース経由で実行する事もできます。

表6.6 基本的 MTA 操作のリスト

exim コマンド | postfix コマンド | 説明
--- | --- | ---
`sendmail` | `sendmail` | 標準入力からメールを読み配送を手配 (`-bm`)
`mailq` | `mailq` | メールキューを状態とキュー ID とともにリスト (`-bp`)
`newaliases` | `newaliases` | エイリアスデーターベースを初期化 (`-I`)
`exim4 -q` | `postqueue -f` | 待機メールを排出 (`-q`)
`exim4 -qf` | `postsuper -r ALL deferred; postqueue -f` | 全メールを排出
`exim4 -qff` | `postsuper -r ALL; postqueue -f` | 凍結メールをも排出
`exim4 -Mg queue_id` | `postsuper -h queue_id` | キュー ID によってメッセージを凍結
`exim4 -Mrm queue_id` | `postsuper -d queue_id` | キュー ID によってメッセージを削除
N/A | `postsuper -d ALL` | 全メッセージを削除

| ヒント
"`/etc/ppp/ip-up.d/*`" 中のスクリプトで全メールを排出するのは良い考えかも知れません。

## 6.3. リーモートアクセスサーバーとユーティリティー (SSH)

セキュアーシェル (SSH) はインターネット経由で接続するセキュアーな方法です。Debian では、OpenSSH と呼ばれる フリーバージョンのSSH が `openssh-client` と `openssh-server` パッケージとして利用可能です。

`ssh`(1) はユーザーにとってより賢明でよりセキュアーな `telnet`(1) として機能します。`telnet` コマンドと異なり、`ssh` コマンドは `telnet` エスケープ文字 (初期デフォールト CTRL-]) に出会うことで中断される事がありません。

表6.7 リモートアクセスサーバーとユーティリティーのリスト

パッケージ | ポプコン | サイズ | ツール | 説明
--- | --- | --- | --- | ---
`openssh-client` | V:898, I:996 | 5133 | `ssh`(1) | セキュアーシェルクライアント
`openssh-server` | V:745, I:804 | 3502 | `sshd`(8) | セキュアーシェルサーバー
`ssh-askpass` | I:17 | 103 | `ssh-askpass`(1) | ユーザーに ssh-add 用のパスフレーズを尋ねる (プレーン X)
`ssh-askpass-gnome` | V:0, I:3 | 215 | `ssh-askpass-gnome`(1) | ユーザーに ssh-add 用のパスフレーズを尋ねる (GNOME)
`ssh-askpass-fullscreen` | V:0, I:0 | 41 | `ssh-askpass-fullscreen`(1) | 見た目良くユーザーに ssh-add 用のパスフレーズを尋ねる (GNOME)
`shellinabox` | V:0, I:1 | 525 | `shellinaboxd`(1) | ブラウザーアクセス可能な VT100 ターミナルエミュレーターのためのウエッブサーバー

`shellinabox` は SSH プログラムではありませんが、リモートターミナルアクセスのための興味深い代替策としてここにリストしています。

リモート X クライアントプログラムへの接続のために「Xサーバ接続」も参照下さい。

| 注意
あなたの SSH がインターネットからアクセスできる場合には、「インターネットのためのセキュリティー強化策」を参照下さい。

| ヒント
リモートのシェルプロセスが回線接続の中断の際にも継続するようにするために `screen`(1) プログラムを使いましょう (「screen プログラム」を参照下さい)。

### 6.3.1. SSH の基本

OpenSSH SSH デーモンは SSH プロトコル2のみをサポートします。

"`/usr/share/doc/openssh-client/README.Debian.gz`" と `ssh`(1) と `sshd`(8) と `ssh-keygen`(1) と `ssh-add`(1) と `ssh-agent`(1) を参照下さい。

| 警告
OpenSSH サーバーを実行したい場合には、"`/etc/ssh/sshd_not_to_be_run`" が存在してはいけません。 rhost に基づく認証を有効化してはいけない (`/etc/ssh/sshd_config` 中の `HostbasedAuthentication` )。

表6.8 SSH 設定ファイルのリスト

設定ファイル | 設定ファイルの説明
--- | ---
`/etc/ssh/ssh_config` | SSH クライアントのデフォールト、`ssh_config`(5) 参照下さい
`/etc/ssh/sshd_config` | SSH サーバーのデフォールト、`sshd_config`(5) 参照下さい
`~/.ssh/authorized_keys` | 当該 SSH サーバーの当該アカウント接続用にクライアントが使用するデフォールト公開 SSH キー
`~/.ssh/id_rsa` | ユーザーの秘密 SSH-2 RSA キー
`~/.ssh/id_key-type-name` | ユーザの秘密 SSH-2 key-type-name キー (`ecdsa`, `ed25519` など)

クライアントから `ssh`(1) 接続を開始するには以下のようにします。

表6.9 SSH クライアント起動例のリスト

コマンド | 説明
--- | ---
`ssh username@hostname.domain.ext` | デフォルトモードで接続
`ssh -v username@hostname.domain.ext` | デバッグメッセージを有効にしてデフォルトモードで接続
`ssh -o PreferredAuthentications=password username@hostname.domain.ext` | SSH バージョン 2 でパスワードを使うことを強制
`ssh -t username@hostname.domain.ext passwd` | リモートホストでパスワードを更新するために `passwd` プログラムを実行

### 6.3.2. リモートホストでのユーザ名

ローカルホストとリモートホストで同じユーザ名を使っている場合は "`username@`" と打たなくてもよいです。

たとえローカルとリモートで異なるユーザー名を使う場合でも、"`~/.ssh/config`" を用いるとユーザー名を省略できます。例えば Debian Salsa サービスでのユーザー名が "`foo-guest`" の場合は、"`~/.ssh/config`" が次を含むように設定します。

    Host salsa.debian.org people.debian.org
    User foo-guest

### 6.3.3. リモートパスワード無しでの接続

"`PubkeyAuthentication`" (SSH-2 プロトコル) を使うと、リモートシステムのパスワードを覚えなくてもよくなります。

リモートシステムの "`/etc/ssh/sshd_config`" 中に対応する項目 "`PubkeyAuthentication yes`" を設定します。

次に示すように、ローカルで認証キーを生成しリモートシステム上に公開キーをインストールします。

    $ ssh-keygen -t rsa
    $ cat .ssh/id_rsa.pub | ssh user1@remote "cat - >>.ssh/authorized_keys"

ホストを制限したり特定コマンドを実行したりするには "`~/.ssh/authorized_keys`" 中の項目にオプションを追加します。`sshd`(8) の "AUTHORIZED_KEYS FILE FORMAT" を参照下さい。

### 6.3.4. 外部 SSH クライアントへの対処法

他のプラットフォーム上で利用可能なフリーな SSH クライアントがいくつかあります。

表6.10 他のプラットフォーム上で使えるフリーな SSH クライアントのリスト

環境 | フリーの SSH プログラム
--- | ---
Windows | puTTY (PuTTY: 自由な SSH と Telnet クライアント) (GPL)
Windows (cygwin) | cygwin 中の SSH (Cygwin: Windows 上での Linux 感覚を得よう) (GPL)
Mac OS X | OpenSSH; ターミナルアプリケーションの `ssh` を使用します (GPL)

### 6.3.5. ssh-agent の設定

SSH の認証キーをパスフレーズで保護する方がより安全です。もしパスフレーズが設定されていない場合には "`ssh-keygen -p`" で設定できます。

上記のようにパスワードを使って接続したリモートホスト上の "`~/.ssh/authorized_keys`" 中にあなたの公開 SSH キー (例えば "`~/.ssh/id_rsa.pub`") を設定します。

    $ ssh-agent bash
    $ ssh-add ~/.ssh/id_rsa
    Enter passphrase for /home/username/.ssh/id_rsa:
    Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)

今後、次のコマンドにリモートパスワードは必要ありません。

    $ scp foo username@remote.host:foo

ssh-agent のセッションを終了するのに ^D を押します。

X サーバーの場合、普通の Debian の起動スクリプトは親プロセスとして `ssh-agent` を実行します。だから `ssh-add` は1回だけ実行すれば十分です。詳細は `ssh-agent`(1) と `ssh-add`(1) を参照下さい。

### 6.3.6. リモートホストからメールを送信する

適切な DNS 設定がなされたサーバに SSH アカウントを持っている場合、リモートサーバから真に送られたメールとして、ワークステーションからメールを送信することができます。

    $ ssh username@example.org /usr/sbin/sendmail -bm -ti -f "username@example.org" < mail_data.txt

### 6.3.7. SMTP/POP3 トンネルをするためのポートフォワーディング

`ssh` を通して `localhost` のポート 4025 から `remote-server` のポート 25 へと、`localhost` のポート 4110 から `remote-server` のポート 110 へと接続するパイプを設定するには、ローカルホスト上で以下のように実行します。

    # ssh -q -L 4025:remote-server:25 4110:remote-server:110 username@remote-server

このようにするとインターネット経由で SMTP/POP3 サーバーへとセキュアーに接続できます。リモートホストの "`/etc/ssh/sshd_config`" 中の "`AllowTcpForwarding`" エントリーを "`yes`" と設定します。

### 6.3.8. SSH 上のリモートシステムをシャットダウンする方法

"`shutdown -h now`" (「システムをシャットダウンする方法」を参照下さい) を実行しているプロセスを `at`(1) コマンド (「タスク1回実行のスケジュール」を参照下さい) を使って以下のようにして SSH が終了することから守る必要があります。

    # echo "shutdown -h now" | at now

"`shutdown -h now`" を`screen`(1) (「screen プログラム」を参照下さい) セッション中で実行しても同様のことができます。

### 6.3.9. SSH のトラブルシュート

問題があるときは設定ファイルのパーミッションを確認し、`ssh` を"`-v`" オプションとともに実行します。

root でファイアーウォールと問題を起こした場合には、"`-p`" オプションを使います; こうするとサーバーポートの 1 — 1023 を使うのを回避します。

リモートサイトへの `ssh` 接続が急に動作し無くなった際は、システム管理者による変更、特に可能性が高いのはシステムメンテナンス中に "`host_key`" が変更された結果かもしれません。実際にこういう状況で誰も洒落たハックでリモートホストとしてなりすまそうとしていないことを確認した後に、"`host_key`" エントリーをローカルホストの "`~/.ssh/known_hosts`" から削除すると再び接続できるようになります。

## 6.4. プリントサーバーとユーティリティー

旧来の Unix 的システムでは BSD のラインプリンターデーモン (lpd)が標準で、古典的フリーソフトウェアーの標準プリント出力フォーマットは PostScript (PS) でした。Ghostscript とともに何らかのフィルターシステムを使うことで non-PostScript プリンターへの印刷が可能になっていました。「Ghostscript」を参照下さい。

現代的な Debian システムでは Common UNIX Printing System (CUPS) がデファクトスタンダードで、現代的なフリーソフトの標準プリント出力フォーマットは Portable Document Format (PDF) です。

CUPS は、インターネット印刷プロトコル (IPP) を使います。IPP は新たなクロスプラットフォームの両方向通信能力のあるリモート印刷のデファクト標準となっています。

CUPS システムのファイルフォーマット依存の自動変換機能のおかげで、どんなデーターでも `lpr` コマンドに供給すると期待される印刷出力が生成されます。(CUPS では、`lpr` は`cups-bsd` パッケージをインストールすると有効となります。)

Debian システムには、プリントサーバーやユーティリティーで留意すべきパッケージがいくつかあります。

表6.11 プリントサーバーとユーティリティーのリスト

パッケージ | ポプコン | サイズ | ポート | 説明
--- | --- | --- | --- | ---
`lpr` | V:2, I:2 | 378 | printer (515) | BSD lpr/lpd (ラインプリンターデーモン)
`cups` | V:118, I:460 | 1092 | IPP (631) | インターネット印刷 CUPS サーバー
`cups-client` | V:137, I:474 | 433 | , , | CUPS 用System V プリンターコマンド: `lp`(1) と `lpstat`(1) と `lpoptions`(1) と `cancel`(1) と `lpmove`(8) と `lpinfo`(8) と `lpadmin`(8) 等
`cups-bsd` | V:36, I:194 | 131 | , , | CUPS 用BSD プリンターコマンド: `lpr`(1) と `lpq`(1) と `lprm`(1) と `lpc`(8) 等
`printer-driver-gutenprint` | V:13, I:61 | 1122 | 非該当 | CUPS 用のプリンタードライバー

| ヒント
CUPS システムはウェッブブラウザーを "http://localhost:631/" に向けることで設定できます。

## 6.5. 他のネットワークアプリケーションサーバー

他のネットワークアプリケーションサーバーを次に示します。

表6.12 他のネットワークアプリケーションサーバー

パッケージ | ポプコン | サイズ | プロトコル | 説明
--- | --- | --- | --- | ---
`telnetd` | V:0, I:1 | 51 | TELNET | TELNET サーバー
`nfs-kernel-server` | V:45, I:54 | 797 | NFS | Unix 式ファイル共有
`samba` | V:106, I:121 | 5011 | SMB | Windows のファイルとプリンター共有
`netatalk` | V:0, I:1 | 814 | ATP | Apple/Mac のファイルとプリンター共有 (AppleTalk)
`proftpd-basic` | V:4, I:10 | 452 | FTP | 汎用ファイルダウンロード
`apache2` | V:186, I:227 | 586 | HTTP | 汎用ウェッブサーバー
`squid` | V:9, I:10 | 9349 | , , | 汎用ウェッブプロキシサーバー
`bind9` | V:35, I:39 | 888 | DNS | 他のホストの IP アドレス
`isc-dhcp-server` | V:15, I:25 | 6102 | DHCP | クライアント自身の IP アドレス

コモンインターネットファイルシステムプロトコル (CIFS) はサーバーメッセージブロック (SMB) と同じプロトコルで Microsoft Windows で広く使われています。

| ヒント
サーバーシステムの統合には、「集中システム管理」 を参照下さい。

| ヒント
ホスト名の解決は通常 DNS サーバーによって提供されます。ホストの IP アドレスが DHCP によって動的にアサインされる場合には Debian wiki 上のDDNS ページ に書かれているようにして `bind9` と `isc-dhcp-server` を使いホスト名解決のための ダイナミック DNS が設定できます。

| ヒント
Debian アーカイブの全内容のローカルのミラーサーバーを使うより、`squid` 等のプロキシサーバーを使う方がはるかにバンド幅を節約上ではるかに効率的です。

## 6.6. 他のネットワークアプリケーションクライアント

他のネットワークアプリケーションクライアントを次に示します。

表6.13 他のネットワークアプリケーションクライアント

パッケージ | ポプコン | サイズ | プロトコル | 説明
--- | --- | --- | --- | ---
`netcat-traditional` | V:46, I:904 | 139 | TCP/IP | TCP/IP 用万能ツール (スイス陸軍ナイフ)
`netcat-openbsd` | V:21, I:121 | 109 | TCP/IP | IPv6 やプロキシや Unix ソケットサポート付きの TCP/IP 用万能ツール (スイス陸軍ナイフ)
`openssl` | V:834, I:995 | 2503 | SSL | セキュアソケットレイヤー (SSL) のバイナリーと関連する暗号化ツール
`stunnel4` | V:6, I:9 | 573 | , , | 万能 SSL ラッパー
`telnet` | V:12, I:239 | 51 | TELNET | TELNET クライアント
`nfs-common` | V:145, I:199 | 1137 | NFS | Unix 式ファイル共有
`smbclient` | V:27, I:209 | 2106 | SMB | MS Windows のファイルとプリンター共有
`cifs-utils` | V:31, I:118 | 351 | , , | リモートの MS Windows ファイルをマウントやアンマウントするコマンド
`wget` | V:191, I:982 | 3784 | HTTP と FTP | ウェッブダウンローダー
`curl` | V:227, I:684 | 507 | , , | , ,
`transmission-gtk` | V:13, I:178 | 6245 | BitTorrent | BitTorrent クライアント (GTK)
`transmission-qt` | V:0, I:2 | 6203 | , , | BitTorrent クライアント (Qt)
`ktorrent` | V:1, I:5 | 5167 | , , | BitTorrent クライアント (Qt)
`qbittorrent` | V:9, I:22 | 14384 | , , | BitTorrent クライアント (Qt)
`bind9-host` | V:121, I:940 | 140 | DNS | bind9 由来の `host`(1) コマンド、"`Priority: standard`"
`dnsutils` | I:174 | 23 | , , | bind 由来の `dig`(1) コマンド、"`Priority: standard`"
`isc-dhcp-client` | V:169, I:707 | 2884 | DHCP | IP アドレスの獲得
`ldap-utils` | V:10, I:58 | 789 | LDAP | LDAP サーバーからデーター獲得

## 6.7. システムデーモンの診断

`telnet` プログラムを使うとシステムデーモンへの手動接続とその診断ができます。

プレーンな POP3 サービスをテストするには、以下のようにします。

    $ telnet mail.ispname.net pop3

一部の ISP が提供する TLS/SSL を有効にした POP3 サービスをテストするには、`telnet-ssl` か `openssl` パッケージによる、TLS/SSL を有効にした `telnet` クライアントが必要です。

    $ telnet -z ssl pop.gmail.com 995

    $ openssl s_client -connect pop.gmail.com:995

以下の RFC は各システムデーモンに関する必要な知見を提供します。

表6.14 よく使われる RFC のリスト

RFC | 説明
--- | ---
rfc1939 と rfc2449 | POP3 サービス
rfc3501 | IMAP4 サービス
rfc2821 (rfc821) | SMTP サービス
rfc2822 (rfc822) | メールファイルフォーマット
rfc2045 | Multipurpose Internet Mail Extensions (MIME)
rfc819 | DNS サービス
rfc2616 | HTTP サービス
rfc2396 | URI 定義

"`/etc/services`" の中にポートの使用され方が記載されています。

第5章 ネットワークの設定 |  | 第7章 GUI システム