シェアする

  • このエントリーをはてなブックマークに追加

[さくらVPS]鍵交換方式(SSH2)のSSHでサーバ間コピーscpコマンドを使う

さくらのVPSがリニュアルされてメモリ2Gのプランの初期費用が無料キャンペーン中なので、512Mで運用していたサーバを次々2Gに移行中しています。

このとき、SSHがパスワード認証であれば大した苦労もせずscpコマンドで簡単にサーバ間のコピーができるのですが、鍵交換方式(SSH2)を利用していたため、結構苦労しました。

いっそのこと一時的にパスワード認証にして移行しようかとも思ったんですが、今後のためにもならないし、そもそもネットに沢山情報が上がっているのであえて「鍵交換方式(SSH2)」の方法をメモしたいと思います。

RSA鍵について

僕の場合、「PuTTY Key Generator」を使用してRSA鍵を作っているので、コンソールのみでやる方法とは少し違っていますが、SSHの事がまったくわからないという方にはこのほうが理解しやすいかもしれません。

というのも、僕もはじめはコンソールでやってみたのですが、クライアント?で作ったキーをサーバー?に、どっちが公開鍵でどっちが秘密キー???とワケがわからなくなってしまいました。

よくよく理解してみると、「公開鍵」はアクセスされる側(サーバ)に置いておき、「秘密鍵」はアクセスする側(クライアント)に置いてサーバにアクセスする時に利用する、ということなんですね。

ちなみに、この時の「公開鍵」「秘密鍵」をまとめてRSA鍵というのですが、これはどこで(サーバでもクライアントでも、手持ちのWindowsでも)作ってもOKです(たぶん。間違っていたらご指摘をm_ _m)。
僕の場合はWindowsから、PuTTY Key Generatorで作成したものを利用しています。

PuTTY Key Generatorで作成したRSA鍵でSSH接続する方法は、「さくらのVPS を使いはじめる | アカベコマイリ」参考にしました。

ここではSSH接続の方法は割愛し、PuTTY Key Generatorで作成したRSA鍵が既にあって、サーバにはid_rsa.pubをリネームしたauthorized_keysが存在し、接続元のにid_rsaが存在していることを前提に説明します。

コンソールから作成した場合でも基本は同じです。
その場合は、scp 自動応答(ssh 鍵交換方式) | arinuxの説明が詳しくてとても分かりやすいと思います。

鍵交換方式のscp

A(クライアント)からB(サーバ)に、/var/www/html/以下のデータを移行したいとします。
Aには、コピー元/var/www/html/のアクセス権のあるユーザでログインし、Bへは転送先のパスのアクセス権を持つ[転送先のユーザ名]というユーザでSSH接続します。

この場合Bのユーザ[接続先のユーザ名]の/home/.ssh/に公開鍵「authorized_keys」があって、AにBの「公開鍵」に対応する秘密キー「b_rsa_id*[1] 」があるとします。

$scp -i ~/.ssh/b_rsa_id -rv -P [SSHのポート] /var/www/html/ [転送先のユーザ]@[転送先ホスト名・またはIPアドレス]:/var/www/

scpのオプションは、
-iは秘密鍵の指定
-rはディレクトリ全体をコピー
-vは冗長表示モード(転送ログが表示される)
-Pはポートの指定(デフォルトポートの22なら省略)
です。

このとき転送先ユーザが転送先のパスにアクセス権を持っていないとエラーになるので、/var/www/の所有者をchownで一時的に[転送先ユーザ]に変えてやるなどしてください。

僕自身、理解するのに苦労したのでなるべくわかりやすく書こうと努力しましたが、どうでしょう?ご感想やご意見、間違いの指摘などがありましたらぜひお聞かせください。

参考:SSH の仕組み – WebOS Goodies
SSHの仕組みについて理解するのにこのサイトが非常に役立ちました。ありがとうございます。

  1. コンソールで作成するとid_rsa。scpコマンドの -i オプションで指定できるので今回はb_rsa_idという名前にしました []

シェアする

  • このエントリーをはてなブックマークに追加

フォローする