鍵認証でSSH、SFTP接続をしてみる

これまではサーバーとのファイル転送接続は、パスワード認証のSFTPほぼ一択だったので、念願(?)の鍵を使った接続方法を試してみました。

ファイル転送プロトコルについては、こちらの記事で調べました。

鍵認証でのSSH接続の手順

昨年契約して以来、全く使っていないエックスサーバーがあるので、そちらで試してみることにしました。
(その時の模様をまとめた記事です)

エックスサーバーにSSHの接続方法が載っているので下記を見ながら進めていきます。

SSH設定 | レンタルサーバーならエックスサーバー

【初心者向け】エックスサーバーでSSH接続する手順と設定まとめ | ゆるグラミング!!

1. エックスサーバーでSSHを有効化する

サーバーパネルにログインします。
下記のように「状態:ON」となっていればOKです。

2. サーバーに公開鍵の登録を行う

いよいよ登場しました公開鍵!

お客様にて生成の公開鍵を登録していただく方法と、サーバー上で公開鍵認証用鍵ペアを生成し秘密鍵をダウンロードしていただく方法があります

何らかの方法で生成した公開鍵をすでに持っていれば前者(登録)なのだと思います。

自分のPCで鍵ペアを作る→登録、とする事もできるようですが、なにせ初めてなのでエックスサーバーで公開鍵認証用鍵ペアを生成します!

後述する参考サイトに書かれていた

公開鍵と秘密鍵の仕組みを一言で言うと錠前(公開鍵)と鍵(秘密鍵)のようなものです。

サーバーに錠前(公開鍵)を設置することで、さらにセキュリティが強化されて第3者が盗聴や不正侵入するリスクを減らすことができます。

そして、鍵(秘密鍵)は自分のパソコンだけに持っておくことで、サーバーに設置した錠前(公開鍵)を開けてサーバーへ接続できるのは自分だけとなるわけです。

ここでは鍵・錠前(南京錠)の関係をイメージしてみます。

この「パスフレーズ」というのは?

パスフレーズSSH接続の時に使用するパスワードです。 接続時に入力する必要があるので、忘れないよう注意してください。

パスワード認証でつかうものとは別のパスワードですね。大事なものでした。

またこの画面には下記のように注釈がありました。

本機能のご利用により、サーバー上の公開鍵が更新されます。 本機能を利用して鍵ペアを作成すると、秘密鍵のダウンロードが始まるとともに、サーバー上の公開鍵が更新されます。

「生成する」ボタンを押すと秘密鍵がダウンロードされました。

秘密鍵.key が拡張子のファイル。Skypeのアイコンで、押したらSkypeが起動してしまったので慌てて閉じました。

ファイルの情報を確認すると「種類:Keynote書類」とありました。

PC(Mac)に入っているソフトが反応しただけなのかなと思います(調べてもよく分からず)。

秘密鍵を任意の場所に保存すればいいのかと思いきや、

鍵がダウンロードされたら、自分のPCの「.sshディレクトリに移動させましょう!

置く場所が決まっているようです。
ひとまず置いてみます。

3. SSHで繋ぐ

コマンドラインsshコマンドを使ってサーバーに繋いでみます。

$ ssh -i サーバーID.key サーバーID@サーバーID.xsrv.jp -p 10022

サーバーIDはエックスサーバーの「サービス一覧 > Xserver レンタルサーバー」から確認できました。

.sshディレクトリでコマンドを打つと、

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'キー名.key' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "キー名.key": bad permissions
サーバーID@サーバーID.xsrv.jp: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

アットマークがものすごく怖い!

どうやら秘密鍵ファイルの権限が緩くて警告を受けているようです。パーミッション644から所有者のみ読み書きができる600へ変更します。

chmod コマンドを使います。(おそらくchange modeの略)

chmod 600 キー名.key 

パーミッションの変更をして再度 ssh コマンドで接続すると、例のパスフレーズを聞かれました。

すると [サーバーID@sv*** ~]$ と表示されていました。サーバーに接続できました♪

これでパスワード認証ではない、鍵認証でのSSH接続ができました!

ペアになっている、サーバーに置く公開鍵とローカルPCに置く秘密鍵
割とすんなりとできた印象です。

鍵認証でのSFTP接続手順

こちらを参考にしました。

FileZillaでエックスサーバーにSFTP接続で安全にファイル転送する方法

「鍵認証でのSSH設定」は、SFTP接続でも必要なことなので、サーバーのコンパネでSSH設定をONにして、公開鍵・秘密鍵を作成します。

私はFileZillaを使っています。設定をしていきます。

FileZillaの設定

FileZilla秘密鍵の登録をします。
「鍵認証でのSSH接続の手順」で鍵ファイルを置いた.sshディレクトリは隠しフォルダのせいか、FileZillaからでは秘密鍵ファイル選択の際に見つかりません。
一時的に移しても、.sshに戻したらパスが変わって繋がらなくなってしまいます。

致し方なく保存場所を変えてやってみたところ秘密鍵を登録できました。

秘密鍵のファイル形式がFileZillaには合わないようで、変換されました。

「[編集]→[設定]→[SFTP]」から秘密鍵を登録する方法と、接続先の設定画面で秘密鍵を登録する方法と2通りあるようです。
前者の方がFileZilla全体の登録されている鍵が把握できていいのかなと思いますが、どのサーバーとの鍵なのは記載がありませんでした。

ちなみに、sshで繋いだときもポート番号は10022
セキュリティ対策のため、エックスサーバーがsshのポート番号をデフォルトの22から変更しているようです。

接続時にはパスフレーズも聞かれます。

このような画面も出ます。

「常にこのホストを信用し〜」にチェックを入れてOK。無事繋がりました!

さいごに

プロトコルを調べた際に大混乱したので、実際には「習うより慣れろ」かなぁといいう印象です。

秘密鍵は大事にして、鍵認証の接続に慣れて、何かでつまづいたときに復習したいと思います。

おしまい。