2015年3月23日月曜日

Cyberduckを使ってSFTPでサーバに接続する Mac編

MiNe MiNe-5DII_103-9570UG https://www.flickr.com/photos/sfmine79/10468588284

たまに、「FTPアカウントをください」といった依頼を受けることがあるのですが。さすがにFTPは使ってほしくないので、SFTPで接続していただいています。
SSH鍵の生成などは慣れていると簡単ですが。初めての人には若干ハードルが高かったりするので。そのときに、このドキュメントを渡して理解してくれたらいいなと考えて書きました。

FTPではなくて、SFTP?

FTPは危険です。FTPはそのプロトコルの仕組みから、クライアントとサーバが通信する際にパスワードが暗号化されません。
つまり、通信の盗聴にとても弱いと言えます。たとえば、
『スターバックスで Free Wi-Fi に繋ごうとしたら、似たような名前の Wi-Fi があったので接続した。
しかし、それは、盗聴用の Wi-Fi で通信が盗聴され、Webサイトが改ざんされた』
といったように、公衆無線LANのSSID詐称で大きな被害を受けたり、リスクが色々考えられます。
そのため、SSH鍵交換方式による認証を利用したSFTP(SSH File Transfer Protocol)を使って通信内容を暗号化することが必須となります。

SFTPとは?
http://ja.wikipedia.org/wiki/SSH_File_Transfer_Protocol
SSH File Transfer Protocol(略称:SFTP)とは、SSHの仕組みを使用しコンピューター間でファイルを安全に転送するプロトコルである。
sftpは、このプロトコルを利用するコマンドの名前である。
以下、SSH公開鍵と秘密鍵を作成して、SFTPをサポートしたソフト Cyberduck を使ってサーバに接続してみます。

SSH公開鍵と秘密鍵を作成

ターミナルを開きます。
Launchpad -> Other -> Terminal

ターミナルを開いたら、コマンドを入力してSSH公開鍵を作成します。
いくつか設定入力が求められますが、何も入力せずEnterを3回叩くだけでもOKです。
ポリシーによっては、パスフレーズを入力するとよいでしょう。
$ ssh-keygen
Enter file in which to save the key (/Users/yako/.ssh/id_rsa): ファイルを作成する場所は?
Enter passphrase (empty for no passphrase): パスフレーズは?
Enter same passphrase again: 同じパスフレーズを入力

このような記号入りの図が表示されたら、SSH公開鍵の作成が完了しています。
[ RSA 2048]となっているのを確認します。
これは、SSH鍵の種類がRSAで2048bit鍵であることを表しています。もし、1024bitだったら鍵の長さが十分ではありません。鍵の長さを指定して作成しなおしましょう。

SSH公開鍵の内容を確認します。
$ cat $HOME/.ssh/id_rsa.pub
ずらずらっとテキスト文字列が出てきます。
次のコマンドでSSH公開鍵のテキストがクリップボードにコピーされます。
$ pbcopy < ~/.ssh/id_rsa.pub
このテキスト情報をサーバ管理者に渡してサーバアカウントを作ってもらいましょう。
※ 同時に秘密鍵($HOME/.ssh/id_rsa)が作成されています。このファイルは絶対に誰かに渡してはダメです。

Cyberduckでサーバに接続

サーバアカウントができたら、接続してみましょう。
https://cyberduck.io/
上記サイトからCyberduckをダウンロードします。
最新バージョンは、4.6.5でした。

ソフトを起動したら。左上の [Open Connection] を開きます。
サーバへの接続情報を、入力していきます。
プルダウンから [SFTP (SSH File Transfer Protocol)] を選択
Server: サーバのIPアドレス
Username: ユーザ名
Password: パスフレーズを入力(SSH公開鍵を作成したときに、パスフレーズを設定しなかった時は空のまま)
一番下の [Use Public Key Authentication] をチェックして、SSH秘密鍵を選択 [Choose] します。
[Connect]を選択してサーバに接続します。
最初の接続では、fingerprint (SSHサーバーの公開鍵の指紋)が正しいか聞かれます。
[Allow] をクリックして接続します。
ちゃんと接続できたでしょうか?

セキュアにサーバへ接続する事ができるようになりました。