解決!MacBook で SSH と SFTP を公開鍵認証で接続しようとしてかなりハマった話とSSHログイン用のスクリプト
Mac初心者なもので何をやるにもイロイロとハマります。
今回は、SSHとSFTPでの公開鍵認証による接続でかなーり深い溝にハマりました。
公開鍵認証接続で以下のソフトを介して自分が管理しているサーバー(VPS)につなごうとしたところ、"Too many authentication failures"や"接続エラー"が出てうまく接続できない状態になってしまいました。
- 対象ソフト
- ターミナル (SSH接続)
- FileZilla (SFTP接続)
- Dreamweaver (SFTP接続)
同じサーバーに対して、複数アカウントでアクセスしようとする場合で、それぞれの鍵および鍵のパスフレーズをキーチェーンに登録すると、どうもうまく動かない様子です。
鍵の保存と権限(ターミナル SSH接続用の設定)
マックの事は良くわかっていませんが・・・、とりまLinuxベースなんで、ユーザーホームの直下に .ssh ディレクトリを作成して鍵を保存。
パスフレーズ付きの鍵の場合、一つのサーバーに対して一つの鍵までであれば問題なく動作するようなのですが、複数の鍵や複数ユーザーを使い分けたい場合は、競合してしまうのかうまく動きません。
そこで鍵をパスフレーズなしの鍵に変換し、~/.ssh/config を作成して、ユーザー名と鍵を一対の組み合わせに指定します。
SSHエージェントに登録された鍵情報を削除
いろいろと試行錯誤してきたせいで、一つのサーバーに対して複数の情報が登録されてしまっていると動かないので、キーチェーンに登録されたSSH鍵の情報を全削除してしまいます。
ssh-add -D
Too many authentication なんちゃらが出てつながらない場合は、とりあえず上のコマンドで以前にアクセスした際の設定を消してしまうことでつながるようになるようです。
キーチェーンにいろいろなサーバーの設定を記憶させてきた場合は、それらも消えてしまうので、むやみやたらにはしない方が良いとは思います。
ただ、今回は、パスフレーズを削除し、config ファイルを作ってそこに設定情報を納めるようにするので、割りきって設定をクリアしてしまいました。
パスフレーズの削除
以下のコマンドを実行しパスフレーズを入力してパス無し鍵を作成します。
openssl rsa -in ~/.ssh/hogehoge.id_rsa(パス有り鍵) -out ~/.ssh/fugafuga.id_rsa(パス無し鍵)
ファイルの権限は、chmod で念のため 400 にしておいたほうが良いと思います。
chmod 400 ~/.ssh/fugafuga.id_rsa
~/.ssh/config の作成
次にconfigファイルを作成
vim ~/.ssh/config
としてファイルを作成し、ターミナルでSSH接続に使用する鍵について設定を書き込みます。
なお、FileZillaやDreamweaverで使用する鍵は登録しません。
IdentitiesOnly yes Host fuga HostName fuga.jp Port 54321 User fuga IdentityFile ~/.ssh/fugafuga.id_rsa Host foo HostName 123.123.123.123 Port 55555 User foo IdentityFile ~/.ssh/foo.id_rsa (以下、必要なぶんだけ繰り返し)
こうしておくことで、ターミナルで
ssh fuga
と打ち込むだけで、configに設定した内容でアクセスができるようになります。
IdentitiesOnly yes を一行加えることで、複数参照をしなくなるとのことです。
自動でrootに昇格するログイン用マクロ
ログイン後に自動でルートに昇格するスクリプトを作っておくと便利です。もっとも、セキュリティ的にもsudo使わずrootに昇格させちゃうことも、かなり問題有りなので、おすすめはいたしません。自分としては鍵のパスフレーズも外しちゃったことだし、とことん楽にしてみようという魂胆です。
#!/bin/sh host='fuga' rootpass='ルートアカウントのパスワード' expect -c " set timeout 10 spawn ssh ${host} expect "~]$" send \"su -\n\" expect \"パスワード:\" send \"${rootpass}\n\" interact "
expect の””内のテキストは、アクセスするサーバーの言語設定などにあわせて、適宜変更する必要があります。
Dreamweaver用の設定
DreamweaverでSFTPアクセスするための鍵も、前述の方法でパスフレーズを削除し、~/.ssh/ディレクトリに保存します。
DWのサーバー設定で、ユーザー名を入力、パスフレーズなしの鍵を選択、パスフレーズ欄は空欄のままで[パスフレーズを保存]するチェックボックスをチェックしておきます。
設定ミスなどで上手く繋がらなくなったら、ターミナルでキーチェーンの削除コマンドを打ち込んでしまえば、おそらくまた繋がるようになると思います。
ssh-add -D
Dreamweaverは、どうやらSSHエージェントに鍵の情報を登録しているようです。*1
FileZillaの設定
FileZillaは、設定から鍵ファイルを登録する際にパスフレーズを入力し、~~.ppkファイルを作成させられます。
このファイルも、~/.ssh/において、400にしておくと良いと思います。