NETSUITE / SFTP / SSH KEY

SFTPの鍵まわりでハマった。
PPK・PEM・PuTTYgenを整理する。

SFTP接続を追っていたら、 hostKeyだけではなく、 鍵ファイルの形式まで見ることになりました。

PPK。 PEM。 PuTTYgen。 OpenSSH。

公開鍵と秘密鍵の役割自体は そこまで迷いませんでした。

むしろ分かりづらかったのは、 同じ鍵まわりの話でも、 どの形式をどこで使うのか、 どう変換するのかという部分でした。

FIRST QUESTION

鍵はある。
なのに、そのまま使えない?

SFTP接続で鍵認証を使うとき、 最初は 「鍵ファイルがあれば使える」 くらいに考えていました。

でも実際には、 手元にある鍵ファイルと NetSuite側で扱いたい形式が 同じとは限りません。

そこで出てきたのが、 PPKとPEMでした。

「どっちも鍵なのに、 何が違うんだ?」

というところから 形式の違いを見ることになりました。

PUBLIC / PRIVATE KEY

公開鍵と秘密鍵は、
役割を分けて考えていた。

公開鍵と秘密鍵については、 そこまで迷った記憶はありません。

公開鍵は、 接続先へ共有する側。

秘密鍵は、 接続する側で持って使う。

PPKも、 基本的にはこちら側で扱う 鍵ファイルとして見ていました。

必要に応じて、 相手側へ公開鍵を提供する。

このあたりは比較的分かりやすくて、 実際に引っかかったのは その先の PPKとPEMの形式の違い や、 どのツール・環境で どの形式を使うのかという部分でした。

PPK / PEM

PPKとPEM、
同じ鍵でも形式が違う。

次に引っかかったのが、 PPKとPEMでした。

PPKは、 PuTTY系のツールで使われる 秘密鍵ファイル形式です。

一方のPEMは、 OpenSSHなどでも扱われる 鍵や証明書の表現形式として よく出てきます。

自分が困ったのは、 手元で使っていた鍵を そのままNetSuite側へ持っていけない 場面があったことでした。

そのため、 必要に応じて 鍵ファイルをPEM形式へ変換して 確認することもありました。

「鍵が違う」のではなく、
同じ鍵でも 保存されている形式が違うことがある。

ここが分かると、 PPKとPEMという名前だけで 混乱しにくくなりました。

PUTTYGEN

そこで使ったのが、
PuTTYgenだった。

鍵ファイルの形式を確認したり、 必要な形式へ変換したりするときに PuTTYgenを使いました。

最初は、 「鍵を作るツールなのか?」 くらいの感覚でした。

実際に触ってみると、 鍵を読み込んだり、 別の形式で保存したりできる。

手元にPPKがある。

でも、 使いたい側では 別の形式が必要になる。

そこで、 PuTTYgenを使って 必要な形式へ変換する。

今持っている鍵は何形式で、
次にどの形式が必要なのか。

操作そのものより、 そこを確認する方が大事でした。

OPENSSH

WinSCPやPuTTYだけじゃなく、
OpenSSHも出てきた。

Windowsのコマンドプロンプトから SFTPへ直接接続して確認していたときには、 OpenSSH側の話も出てきました。

WinSCPやPuTTY系では PPKを扱うことがあります。

一方で、 OpenSSH側では 別の形式の鍵を扱うことがあります。

だから、 「WinSCPではつながるのに、 別の方法だとうまくいかない」 というときは、 接続先だけではなく 鍵形式も確認する必要がありました。

同じSFTP接続でも、 使うツールによって そのまま同じ鍵ファイルを使えるとは限らない。

このあたりから、 接続情報だけでなく 鍵を扱っている環境まで 見るようになりました。

NETSUITE

最後は、
NetSuiteでどう使うのかを見る。

NetSuiteからSFTPへ接続するときも、 鍵を使った認証を扱うことがありました。

NetSuite側へ鍵を登録し、 SuiteScriptから その鍵を指定して接続します。

CODE N/sftp
var connection =
    sftp.createConnection({
        username: username,
        keyId: keyId,
        url: host,
        directory: directory,
        hostKey: hostKey
    });

ここで、 keyId は NetSuite側へ登録した鍵を 使うための指定です。

一方の hostKey は、 接続先のSFTPサーバーを 確認するために使います。

最初は、 この二つも 「どっちも鍵なのか」 と少し引っかかりました。

でも、 役割として見ると 整理しやすくなります。

  • keyId → 接続するときに使う鍵
  • hostKey → 接続先サーバーを確認するための情報

SFTPがつながらないときは、 このあたりも一つずつ確認していました。

TROUBLESHOOTING

鍵でハマったら、
何を使っているのかを見る。

SFTP接続で鍵まわりにハマると、 PPK、PEM、hostKeyなど 似た言葉が一気に出てきます。

そんなときは、 一つずつ確認していました。

  • 今持っている鍵は何形式なのか
  • PPKなのか、PEMなのか
  • どのツールで使っているのか
  • NetSuiteへ登録する鍵なのか
  • hostKeyの話なのか
  • 対向先に公開鍵が登録されているか

全部の仕組みを 最初から理解していたわけではありません。

接続できるか試す。

エラーを見る。

鍵を確認する。

必要なら形式を変換する。

そして、 また接続して確認する。

そうやって進めていました。

SUMMARY

完全に分からなくても、
必要なところから使っていった。

SFTP接続を追っていく中で、 PPK、PEM、PuTTYgen、 OpenSSHと、 鍵まわりの確認まで必要になりました。

正直、 この時点ですべての仕組みを 理解していたわけではありません。

それでも、 接続するために何が必要なのかを調べて、 鍵ファイルを確認し、 必要ならPEM形式へ変換して、 実際に接続を試すことはできました。

PPKとPEMは何が違うのか。

今持っている鍵を どこで使えるのか。

NetSuiteでは 何を登録すればいいのか。

分からないところはありながらも、 必要なところを調べながら 一つずつ進めていきました。

仕組みを完全に理解できていなくても、
必要なところを確認しながら 使うことはできる。

そして、 実際に使って問題を追っていく中で、 後から少しずつ 何をしていたのかも分かってきました。

SFTPの鍵まわりは、 そんな覚え方をした部分だったと思います。

SFTP連携を外から確認しながら切り分けた話 →