SFTP(SSH File Transfer Protocol)は、ネットワーク越しにファイルを転送するためのプロトコルで、従来のFTP(File Transfer Protocol)にセキュアシェル(SSH)コンポーネントを含めたものです。このライブラリではTransmitがSFTPサーバとの接続をどのように処理しているか、また予期しない動作が起こった際のトラブルシューティングについて説明します。


認証フローについて

SFTP認証はTransmit 5でどのように動作しますか?

TransmitがSFTP接続を確立しようとすると、ユーザ名、パスワード、認証鍵を複数の場所で検索します。それらの場所と順序は以下の通りです。Transmitは常に以下の順序で試行し、失敗するか項目が見つからない場合は次のステップに進みます。

ユーザ名の優先順位
1. Transmit内で定義されたユーザ名
2. SSH config ファイル内で定義されたユーザ名
3. 現在のMacにログインしているユーザのアカウント名
パスワードおよび認証鍵の優先順位
1. システムのSSHエージェントに追加されたSSH認証鍵
2. Transmit内で定義されたSSH認証鍵
3. SSH configファイル内で定義されたSSH認証鍵
4. Transmit内で定義されたパスワード
5. ~/.ssh 内のデフォルトのid_*認証鍵
6. パスワードも認証鍵も見つからない場合、Transmitは認証プロンプトを表示

ユーザ名の優先順位

SFTPサーバに接続し認証する際、Transmitは定義されたユーザ名を下記の順序で優先します:

Transmit内で定義されたユーザ名
お気に入り設定で定義されているユーザ名もしくは、クイックコネクトで定義されたユーザ名を参照します。
SSH configファイル内で定義されたユーザ名(場所: ~/.ssh/config より詳しい情報はこちら
Configファイル内でユーザ名が定義されている場合は、Transmitの接続パネルのユーザ名欄は空にしてください。
現在のMacのログインユーザ名
Configファイル内でもTransmitの接続設定でもユーザ名が定義されていない場合、TransmitはあなたのMacのユーザアカウント名を使用します。

パスワードおよび認証鍵の優先順位

Transmit 5は以下の順序で、パスワードおよび認証鍵を定義しようとします:

システムのSSHエージェントに追加されたSSH認証鍵
Transmitはまず、システムのssh-agentに追加されたSSH認証鍵による認証を試みます。
Transmit内で定義されたSSH認証鍵
認証鍵をシステムエージェントに追加する方法が分からない場合は、Transmitから追加することが可能です。

接続に使用するSSH認証鍵はファイルとして存在しており、予め読み込むか、新規生成します。

なお、Transmitで利用されるSSH認証鍵は、Transmit環境設定の認証鍵タブで管理されます。暗号化された認証鍵は読み込み時にパスフレーズが尋ねられ、システムのキーチェーンにセキュアに格納されます。 SSH Keys in Transmit Settings. 認証鍵が読み込まれたらお気に入り設定で選択するために編集します。 認証鍵が暗号化されており、パスフレーズを保存していない場合、接続時にパスワードが尋ねられます。 SSH key associated with Transmit Server.

SSH config ファイル内で定義されたSSH認証鍵
設定で定義されたSSH認証鍵がない場合、Transmitは、SSH configファイル内で関連づけられている認証鍵を使用しようとします。
Transmit内で定義されたパスワード
続いて、サーバ設定で定義されたパスワードを使用しようとします。
~/.ssh 内のデフォルトのid_*認証鍵
次にTransmitは~/.sshディレクトリ内のデフォルトのid_*認証鍵(id_rsaやid_dsa、id_ed25519やid_ecdsa)を使用しようとします。Transmitによるサーバ接続時、Mac上の既存の認証鍵を使用せずに認証したい場合は、予めお気に入り設定でパスワードや認証鍵を指定し、設定しておくことをお勧めします。これらの認証鍵が暗号化されており、またキーチェーンに格納されていない場合、Transmitは認証鍵のパスフレーズを尋ねるダイアログを表示します。
SSH Key passphrase alert prompt.

暗号化された認証鍵への認証をスキップしたい場合は、パスフレーズ欄を空のまま接続ボタンをクリックします。

パスワードも認証鍵も見つからない場合、Transmitは認証プロンプトを表示
その都度パスワードを尋ねるダイアログが表示されるようになります。

トラブルシューティング

Transmitでサーバに接続できません

SFTP接続が失敗する原因をピンポイントで特定するのは難しく、さまざまな理由が考えられます。サーバ接続できないと一言で言う前に、次の点をご確認ください。

1. ログイン情報は正しいですか?

当たり前のように聞こえるかも知れませんが、念のためご確認ください。SFTPサーバに接続するには最低でも以下の情報が必要です:

  • サーバアドレスserver.comのような形式のIPv4アドレスです)
  • ポート番号(SFTP接続では22がデフォルトです)
  • ユーザ名
  • パスワード(必要に応じてSSH認証鍵)

注意: 私たちパニックはあなたのWebホストではありません。またログイン情報の一切を知りません。それらの情報はご契約のISPのサポートセンターにお尋ねください。

接続にSSH認証鍵が使われている場合は知っておいていただきたい情報があります。SSH認証鍵を使用した接続に関するライブラリもご一読ください

2. トランスクリプトやエラーメッセージを確認する

エラーを含む接続に関する情報はトランスクリプトにログとして記録されます。ウインドウメニューからトランスクリプトを選択することで表示が可能です。多くの場合、このトランスクリプトに記録されたエラーメッセージを読むことで何が間違っているのか、どの設定を変更する必要があるのかを知ることができます。またTransmit設定 > 上級 > 詳細サーバ設定…から固有の設定を変更することも可能です。

3. ファイアウォールなどのネットワークセキュリティアプリを1時的にオフにしてみる

ファイアウォールやLittle Snitchなどのネットワークユーティリティ、またルータの設定等の攻めすぎたセキュリティ対策により、サーバ接続に問題が発生することがあります。企業や大学のネットワークからの接続時によくある原因のひとつです。接続に問題が起こった場合は1度、このようなアプリやデバイスの設定をオフにしてみてください。ネットワーク機器の電源を入れ直すことも役立つ場合があります。

テストとして、問題が起こっているMacを別のネットワークに接続してみてください。自宅で起こる場合はMacを職場や学校に持って行き、またはその逆を行います。iPhoneによるテザリング回線で試すのも良いでしょう。他のネットワークでは接続できる場合は、現象が起こるネットワーク自身に問題が発生していると考えられます。

4. 他のSFTP接続クライアントで試してみる

Transmit以外のSFTPクライアントソフトと動作を比べてみてください。それにより多くのことが分かります:

  • 他のSFTPクライアントでも接続できない場合、Transmit以外に起因する現象であると言えます。海鮮や接続先のサーバに原因がある場合、私たちではどうすることもできません。サーバや接続回線の管理者にお尋ねください。
  • 他のSFTPクライアントでは問題なく接続できる場合、私たちにできることがあります。期待した動作と実際に起こったことや試したことなどの情報と共にサポートセンターまでメールください。問題の特定と現象の解決のために懸命に働きます。

注意: 検証用に接続アカウントをご準備いただけると解決にとても役立ちます。私たちの環境から実際に現象が起こっているサーバに接続を試みることで、お問い合わせの現象について目の当たりにでき、多くの情報を集めることができます。ぜひご検討ください。

5. SFTP接続が有効になっているかどうかを確認する

信じられないことに、特定のサーバでSSHを有効にすると同時にSFTPを無効にすることができます。これにより、コマンドラインからSSH経由で接続できるにも関わらず、TransmitなどのSFTPクライアントからは接続できないと言うことが起こります。サーバ管理者に、SFTPが適切に有効化されているかどうかご確認ください。

6. それでも接続できない場合

Mac自体の動作が適切で無い可能性もあります。念のため1度、セーフモード起動によるユーザフォルダ内の再構築をお試しください。セーフモードでMacを起動し、終了し、再び通常起動します。 セーフモードでの起動方法は下記をご参照ください: Mac OS X: セーフモードで起動する

引き続き状況に変化が無い場合はサポートセンターまでお問い合わせください。その際、ステップ2でのトランスクリプトやステップ4でのテストアカウントをご準備いただけると助かります。

Transmit 5.6.4以降、5.6.5にアップデートしたらサーバに接続できなくなりましたが何故ですか?

Transmitのアップデート後に起こるようになった場合はSSH/SFTP設定を変更する必要があるかも知れません。詳しくは次のセクションでご説明します。


Transmit 5.6.4からSSH認証方法が変更されました

Transmit 5.6.4からいくつかのバグを修正しつつセキュリティを向上させるために、私たちはSFTP接続認証時の振る舞いをコマンドラインでの振る舞いと一致させるための変更を加えました。これに伴い、このバージョン以降のTransmitではパスワードがお気に入りに保存される前に、サーバに関連付けられている認証鍵を使用する様にしました。

認証鍵とは何でしょう?これはコンピュータとサーバに固有の”スーパーなパスワード”とも言うべきファイルです。認証鍵による認証の方がパスワードによる認証よりも安全であるため、Transmitはサーバへのログイン時にこの認証鍵の使用を優先するようになりました。

SFTPサーバに接続する際、以下の様にSSH認証鍵のパスフレーズの入力を求められる場合があります:

SSH Key Passphrase Prompt

また別の可能性として、トランスクリプトログにAuthentication Failedエラーが記録されるかも知れません。

その様な場合は意図したかどうかに関わらず、SSH configファイルにこの接続用の定義された認証鍵が存在することを表しています。

SSHフォルダに誤った認証鍵が無いかを確認する

Finderから~/.sshフォルダにアクセスするには、以下のようにします:

  1. Finderの移動メニューからフォルダへ移動...を選択する
  2. 現れたドロワーで以下を入力し、移動ボタンを押す: ~/.ssh

このフォルダにはid_id_rsaid_ecdsaで始まる認証鍵ファイルが含まれています。明確に使用していない鍵ファイルが残っている場合は名前を変更するか、削除してください。Transmitはパスワード認証を試行する前にこれらのデフォルト認証鍵を使用しようとします。接続先のサーバがこれらの認証鍵を受け入れるように設定されていない場合、接続の問題が発生する可能性があります。

SSH Configファイルの正確性を確認する

不要な認証鍵が無いかどうかのチェックを行ったら、次はSSH configファイルをチェックします。

以下の様にして、任意のテキストエディタでConfigファイルを開きます:

  1. Finderの移動メニューからフォルダへ移動...を選択する
  2. 現れたドロワーで以下を入力し、移動ボタンを押す: ~/.ssh
  3. configファイル上でコンテキストメニューを表示し、エディタを指定して開く

Hostエントリにおけるワイルドカード (*) の使用はあまり理想的ではありません。パスフレーズをキーチェーンに保存していない限り、暗号化された認証鍵の使用の度にTransmitはパスフレーズを要求するでしょう。以下はGithubのドキュメントで指示されている設定です:

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa

このような場合、すべてのアドレスに対してこの認証鍵が定義されているため、SFTP接続の度にTransmitはSSH認証鍵のパスフレーズを尋ねるダイアログが表示される様になります。

上記の様に設定されている環境からコマンドラインを使用して接続する場合にも、パスフレーズの入力を求められます。これはTransmitと同じ振る舞いです。

これを回避するためにホスト欄にワイルドカードを使用せず、指定した認証鍵が実際に利用されるサーバアドレスのみを記述するようにします。先のGithubの例を使用すると、Configファイルは以下の様になります:

Host github.com
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa

こうすることでTransmitはgithub.comに接続する際にパスフレーズを要求するだけになります。

もし複数の任意のアドレスのため意図的にワイルドカードを利用していた場合、それらをすべてスペースで区切ることで追加が可能です。以下に例を示します:

Host github.com mysite.com myserver.com
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa

その他の解決方法

ワイルドカードを回避できない場合は以下のように、ワイルドカードの上にパスワード認証を要求するための非認証鍵ベースの接続を手動で指定する必要もあります:

Host mysite.com
  PasswordAuthentication yes
  
Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa

これによりワイルドカードを維持しながら、サーバ”mysite.com”ではパスワード認証を要求することができます。

Transmit 5.6.4以降でのこの変更は~/.sshディレクトリ内のConfigファイルに記述され定義されたHostエントリに対してのみであることにご注意ください。すべてのワイルドカードに対してではありません。

その他、Transmitや弊社のアプリにおけるSSH認証鍵の取り扱いについての詳細はこちらをご参照ください