秘密鍵を作ってレンタルサーバーにパスワードなしでSSH接続する【さくらのレンタルサーバー】

2025.08.202025.08.21

Web制作 システム

ターミナルを使ってレンタルサーバーにSSH接続する場合、初期状態でパスワードを入力する必要があります。あまり頻繁にSSHで入る必要がないのなら問題ありませんが、例えばGitHubなどでコード管理をしていて、サーバー側から操作する必要がある場合、毎回パスワードを入力する手間を省くためにSSH鍵での接続が必要となります。

今回はSSHの秘密鍵と公開鍵を作成して、ログインを簡略化する方法を紹介します。ターミナルを使った方法を解説していきますが、共有サーバーではターミナルを使用せずに、コントロールパネルから作成できる場合もあります。公式が丁寧に解説しています。こちらをご参照ください。

さくらのレンタルサーバーの場合
https://help.sakura.ad.jp/rs/2804/

XServerのレンタルサーバーの場合
https://www.xserver.ne.jp/manual/man_server_ssh.php
※Xserverはセキュリティの観点から、パスワードを使ったSSH接続を許可していません。公開鍵認証のみとなります。SSH接続して公開鍵を設定することはできませんので、上記サイトの説明に従って設定してください。

パスワードでのSSH接続

まずパスワードを使ったSSH接続についてです。秘密鍵を設定する場合にもパスワードを使ってログインすることになります。ターミナルを開きます。Macであれば標準ターミナル、WindowsではPowerShellなどを使います。WSL&Ubuntuなどで環境を作っている場合はそちらに読み替えてください。コマンドプロンプトでも使えますが、この機会にPowerShellなど入れておいた方がよいかと思います。今回はさくらのサーバーという想定で進めます。

サーバー名などがわからない場合は、登録時のメールを確認するか、コントロールパネルから確認してください。

ssh user@*****.sakura.ne.jp

# パスワードを要求されます。入力するパスワードは表示されません。

user@*****.sakura.ne.jp's password: 

# 成功するとlast loginの時間などが表示され、下記メッセージが表示されます

Welcome to FreeBSD!

# 確認できたので一旦ログアウトします

exit

鍵を作成する

鍵を作成します。鍵はローカルで作成します。

ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa

# -t は暗号の種類です。ここではrsaを指定しています。
# -b はビット数です。2048bitを指定しています。
# -f は保存するフォルダとファイル名です。ファイル名を指定しないとid_rsaとなります。
# ~/はユーザーのルートです。WindowsでCドライブであれば c:/Users/ユーザー名/ を意味します。

Enter passphraseとパスフレーズを聞かれますが、何も入力せずにエンターで省略できます。オプションはあくまで一例です。ビットの指定はなくても作れますし、保存フォルダは c:/Users/ユーザー名/ など絶対パスで書いても問題ありません。Windowsの鍵の保存先は C:\Users\<ユーザー名>\.ssh\ がデフォルトとなります。

そんなフォルダはない、と言われる場合は手動でフォルダを作成してから実行してみてください。~/の使用に慣れない場合は絶対パスで指定しても問題ありません。

mkdir c:/Users/ユーザー名/.ssh

鍵の作成が完了したら、ちゃんとできているか確認します。もちろんエクスプローラーやファインダーから該当フォルダを見に行っても構いません。

ls ~/.ssh

id_rsa id_rsa.pubというファイルができていれば成功です。.pubが公開鍵、拡張子なしが秘密鍵です。秘密鍵はローカルに置いたまま、公開鍵はサーバーにコピーします。

RSAのビット数

RSAで最もセキュリティが高いのは4096bitです。-b 4096 としたいところですが、今回使用したさくらのサーバーは4096bitでは通らなかったため2048bitにしています。(-bをつけなくてもデフォルトで2048bitになります)

鍵の命名ルール

このような説明記事ではデフォルトの名前(id_rsa)を使用することが多いのですが、複数の鍵を使用する際には鍵の命名ルールはある程度考えておくことをおすすめします。あとで名前を変更するのは手間がかかりますし、「id_rsa2」のようなあとで見たときにわからない名前はやめましょう。サーバー1台に対して鍵をひとつしか使用しない場合には id_rsa のままで問題ありません。

公開鍵をサーバーに登録する

公開鍵(今回の例では id_rsa.pub)をサーバーにコピーします。id_rsa.pub をサーバーの .sshフォルダに同ファイルを入れれば済むような気がしますが、実際にはauthorized_keys という専用ファイルに記述する必要があります。

サーバーの .ssh フォルダ内にある authorized_keys という拡張子なしのファイルに id_rsa.pub の中身をコピペする作業です。シンプルな作業なのですが、シンプルなだけに方法がいろいろあり、気を付けるべき点もあります。いくつか方法を紹介します。自分にあったものを選んでやってみてください。

scpコマンドで転送する – 既存の鍵がない場合

最も手早いのはSCPを使ってサーバーに公開鍵をコピーすることです。SCPはSSHを使ったファイル転送プロトコルです。サーバーのパスワードを要求されますので入力してください。

scp ~/.ssh/id_rsa.pub user@*****.sakura.ne.jp:/home/*****/.ssh/authorized_keys

# scp <コピー元のファイルパス> <ユーザー名@接続先のサーバー>:コピー先のファイルパス

ローカルの id_rsa.pub をサーバーの所定の場所に authorized_keys にリネームしてコピーしています。authorized_keys は拡張子なしの特別なファイルですので必ずこのファイル名にする必要があります。

上書き保存となるので注意

注意すべきは、scpでコピーした場合は上書き保存となる点です。すでに別の公開鍵を登録している場合、authorized_keys ファイルが存在し、鍵の情報が格納されています。この方法では上書きされ、元の鍵は消えてしまいます。すでに鍵があることがわかっている場合は別の方法を使います。

エラーが出る failed: No such file or directory

すでにSSH鍵が存在している場合とは逆に、鍵格納用の .ssh フォルダが存在しない場合もあります。Linuxのファイル系コマンドは、ファイル名を指定してコピーすれば勝手にファイルが作られますが、存在しないフォルダの中に作ることはできません。フォルダが存在しない場合は下記のように作成します。

mkdir ~/.ssh

catコマンドで追記する – 既存の鍵がある場合

すでに公開鍵が存在する場合には cat コマンドを使用します。まずはsshでログインします。パスワードを求められます。

ssh user@*****.sakura.ne.jp

SSHで繋いだ後にcatコマンドを使います。

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

# cat <コピー元のファイルパス> >> <コピー先のファイルパス>

これで上書きではなく追記されます。

コマンドで作業をしているとちゃんと中身を確認したくなるものです。そんなときにも catコマンドです。中身を表示することができます。

cat ~/.ssh/authorized_keys

# ssh-rsaから始まる長い文字列が表示されます。
# 既存の鍵があり追記した場合は2つの鍵が表示されるはずです。

エディタで開いて追記する

コマンドで一気にやるとなんだか怖い。ちゃんとファイルを開いてコピーしたいんだという場合は順を追って作業をしてもよいでしょう。

ますローカルで公開鍵 id_rsa.pub の中身をコピーします。ここではユーザーフォルダのルートに .ssh フォルダがある想定で進めます。適宜読み替えてください。

cat ~/.ssh/id_rsa.pub

# ssh-rsa から始まる長い文字列が表示されます。
# すべての文字列をコピーします。余計な空白など入らないようにします。

続いてSSHでサーバーに接続します。

ssh user@*****.sakura.ne.jp

# sshでサーバーに繋ぎます。

cd ~/.ssh

# .sshフォルダに移動

mkdir ~/.ssh

# フォルダがない場合は作成する。ある場合は不要です。
 
ls

# フォルダの中身を確認。省略可

vi authorized_keys

# authorized_keysのファイルをエディタで開きます。
# 同ファイルがない場合は新規作成されます。

viエディタでauthorized_keysを編集します。まだ公開鍵がない場合は空欄、すでに公開鍵がある場合は文字列が表示されます。その場合は2行目にペーストします。ペーストしたい位置でマウスの右ボタンをクリックします。下記のような長い文字列がペーストされればOKです。

ssh-rsa ZDHEIA3NzaC1y**************(以下略

ESCキーで編集モードを抜けます。コマンドモードで下記の文字を入力しエンターを押します。さきほどまでテキストをコピーしていた位置ではなく、左下に入力した文字が表示されていればコマンドモードになっています。

:wq!

# :wq! は強制上書きして終了するためのコマンドです。

viは慣れていないと難しいですから、編集がうまくいかなかった場合は保存せずに下記コマンドで終了します。開いているファイルに変更を加えることなく終了できます。

:q!

編集がうまくできたかをcatコマンドで確認します。

cat authorized_keys

さきほどコピペしたコードが表示されれば成功です。

可能な限りGUIで作業したい場合

WinSCPやFilezillaなどのSCPクライアントでサーバーとのファイルをやりとりしている場合は、こちらから公開鍵をアップロードすることも可能です。ターミナルを使いたくない場合にはおすすめですが、GUIならではの煩雑さもあります。

  1. ローカルの id_rsa.pub ファイルをVScodeなどのテキストエディタで開きます。中身をコピーします。
  2. SCPクライアントで .ssh フォルダに移動します。さくらのレンタルサーバーであれば /home/ユーザー名/.ssh にあります。
  3. authorized_keys というファイルを作成します。すでにファイルがある場合は次に進みます。
  4. 作成したファイルをVScodeなどのテキストエディタで開きます。
  5. さきほどコピーした内容をペースとします。すでにファイルがあった場合は、文字列が並んでいますので2行目にペーストします。
  6. 保存して終了します。

文字コードの問題

作業自体は簡単なのですがGUIの場合は文字コードの問題があります。ファイルを扱う際に使用するクライアントやエディタの文字コードに依存するため注意が必要です。文字コードはUTF-8(BOMなし)、改行コードはLFの環境で作業してください。

BOMとは??

Byte Order Markの略で、テキストファイルの先頭に付加されるバイトデータのことです。Microsoft系のアプリで文字コードの判別に使用されるものですが、今回のような作業においては不要なものです。

テキストエディタであればBOMのありなしは必ず設定できますので、BOMなしの状態で作業をします。VSCodeではUTF-8(BOMなし)と、Tera PadではBOMなしのUTF-8ファイルを「UTF-8N」として明示的に区別しています。メモ帳などは強制的にBOMが付いてきますので使わないようにしましょう。

公開鍵の権限を変更する

公開鍵の登録ができたら権限も設定しておきます。SSH鍵は非常に重要であるだけにパーミッションの判定が厳しいです。デフォルトで問題ないことも多いですが、ここでハマると気づきづらいのできちんとやっておきましょう。

公開鍵フォルダのパーミッション

鍵フォルダ=.sshフォルダのパーミッションは700に設定します。

chmod 700 ~/.ssh

公開鍵ファイルのパーミッション

鍵ファイルのパーミッションは600に設定します。

chmod 600 ~/.ssh/authorized_keys

鍵を使ったSSH接続を試す

全ての設定が完了した後に接続テストを行います。

ssh user@*****.sakura.ne.jp

パスワードの入力なしに接続できれば完了です。接続できない場合は鍵を指定してみてください。このとき指定するのはローカルにある秘密鍵(拡張子なし)です。

ssh -i ~/.ssh/id_rsa user@*****.sakura.ne.jp

# -i オプションは使用する鍵を直接指定できます。

鍵を指定すればつながる場合は設定自体はうまくいっています。後述するconfigファイルを使用する方法で解決可能です。鍵を指定しても繋がらない場合は下記チェックポイントを再度確認してみてください。

チェックポイント

  • サーバーの .ssh フォルダに authorized_keys ファイルがあるか?
  • ローカルの .ssh フォルダに秘密鍵ファイル(拡張子なしのファイル)が保存されているか?
  • authorized_keys の中身は作成した公開鍵(.pubファイル)と同一になっているか?余計なスペースなど入っていないか?
  • authorized_keysに記述されている公開鍵と秘密鍵の名前は一致しているか?
  • 鍵の暗号化方式はサーバーに適合しているか?4096bitなどサーバーが対応していないグレードで作っていたら作り直す。
  • authorized_keys ファイルは文字コード:UTF-8(BOMなし) 改行コード:LFになっているか。(ファイル作成に外部のエディタを使用した場合)

configファイルでログイン設定をする

パスワードの入力を省略できるようになりましたが、もっと快適にするためにconfigファイルを作っておきましょう。ローカルの .ssh フォルダに鍵ファイルとともに保存します。

vi ~/.ssh/config

# .ssh フォルダにconfigファイルを作成します。
# すでにファイルがある場合には既存の設定の次の行に記述します。

configファイルに記述していきます。

Host *****-sakura
    HostName *****.sakura.ne.jp
    User user
    IdentityFile ~/.ssh/id_rsa
    IdentitiesOnly yes

ログイン用の設定ファイルです。Hostに設定した文字列でSSH接続できるようになります。鍵を指定しなければログインできなかった問題もconfigに書いてしまえば解決します。Hostで指定した名称でSSH接続できるようになります。

HostName 任意の名称
User ユーザー名
IdentityFile 鍵ファイルのパス
IdentitiesOnly IdentityFileで指定された秘密鍵のみを使うか

ssh *****-sakura

これでSSH接続できるようになりました。

参考サイト

さくらのレンタルサーバーの場合
https://help.sakura.ad.jp/rs/2804/

XServerのレンタルサーバーの場合
https://www.xserver.ne.jp/manual/man_server_ssh.php

お問い合わせCONTACT

株式会社エー・エム・ティーは
印刷物からホームページ制作・更新運用管理までトータルサポート。
企業様の課題解決や企業価値向上のお手伝いをいたします。

受付9:00~18:00 ※土日祝除く