LolipopでSSH接続する方法と使い方を実例で解説|SSHとは何か?(初心者向け、わかりやすい、ロリポップ)

server-cloud-kv-prograshi(プロぐらし)-kv Server
記事内に広告が含まれていることがあります。

SSHとは何か?

SSHとは、サーバーを遠隔操作する方法の1つで、通信内容を暗号化しているものです。

通信を暗号化していないものにtelnetという通信方法があり、そのパワーアップバージョンです。

簡単にいうと、AWSやGithubなどのサーバー(レンタルサーバー)などに自分のパソコンのコマンドライン(黒画面)からアクセスできる仕組みです。



【追記】

私は元々Lolipop(ロリポップ)で運用していたのですが、数年間運用することでLolipopの重大な問題が発覚したために、いろいろと調べて、Xserver(エックスサーバー)に移管することにしました。

移管に至った経緯や、XserverとConoha Wing(コノハウイング)の比較などについては下記をご参考ください。Xserverの料金が1万円引きになるリンクも紹介しています(私の場合これが最終的な決め手でした)


SSHの認証(ログイン)方式

認証(ログイン)方式には以下の2種類があります。

SSHの認証方法
  1. パスワード
  2. 公開鍵と秘密鍵


パスワード

1つ目はパスワード方式です。

パスワード方式は、サーバーに設定されているユーザーのアカウントとパスワードを使用してSSH接続する方法です。

レンタルサーバーlolipopの場合はこちらの方法を用いています。


公開鍵と秘密鍵

2つ目は公開鍵と秘密鍵を使う方式です。

自分のパソコンでコマンドラインを使って公開鍵と秘密鍵を作成し、公開鍵をSSHで接続したいサーバーに登録します。

自分のパソコンからSSHで接続しようとしたときに、公開鍵と秘密鍵が照合されると通信が可能になります。

AWSやGithubなどのサーバーは公開鍵と秘密鍵でSSH接続をする方法を用いています。


どっちがいいか?

安全なのは公開鍵と秘密鍵を使う方式です。

ただし、その分、カギを生成し、公開鍵を登録するといった手間が発生します。

複数人でアクセスするプロジェクトなどは、個々人が公開鍵と秘密鍵を作成し、それをサーバーのユーザー情報登録してSSH接続を行うのが一般的です。

秘密鍵は知られたら非常にマズいものなので、間違えてGithubで公開したり、他の人に渡さないように注意が必要です。(パスワード方式のアカウント名とパスワードと同じです)


lolipopでSSHを使うには?

lolipopのエコノミーやライトプランではSSH接続は使用できません。

SSHを使用するには、スタンダート以上のプランを契約している必要があります。

私はSSHが使いたいのとMySQLを複数作成したいので、スタンダートにアップグレードしました。

以降で、lolipopで実際にSSHを使用する手順を解説します。


SSHの有効化

lolipopはデフォルト状態ではSSHは有効化されていません。

SSHを有効化するには、lolipopの管理画面にログインし、サイドメニューの「SSH」をクリックします。

すると「SSHを有効にする」というボタンが表示されるのでこれをクリックします。



「SSHを有効にする」をクリックして数秒でSSHの有効化が完了し、以下のような画面が表示されます。

以上でSSHの有効化は完了です。


コマンドラインでSSH接続する

コマンドライン(黒画面)からSSHを使ってlolipopにアクセスできる状態になったので実際にアクセスしてみます。

sshコマンドを使ってlolipopのレンタルサーバーにアクセスします。その際、上記の管理画面で表示された「アカウント名」と「サーバ名」を使用します。

$ ssh <SSHアカウント名>@<サーバー名> -p 2222

「-p」オプションはポート番号を指定するオプションです。lolipop側では「2222」ポートがSSH用に開通してあるので、それを指定します。


実例

$ ssh my-acount-name@ssh.kr.lolipop.jp -p 2222
The authenticity of host '[ssh.kr.lolipop.jp]:2222 ([133.130.35.108]:2222)' can't be established.
RSA key fingerprint is SHA256:AAAABBBBCCCCDDDDEEEEFFFF.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?

sshコマンドを使ってログインすると、初回の場合は、「ホスト(サーバー)の暗号キーがまだ登録されていません。接続処理を続けてもいいですか?」という確認が表示されます。

以下のように「yes」と入力します。

(なお、RSAとは暗号化方式のことです。)

Are you sure you want to continue connecting (yes/no/[fingerprint])? yes   
Warning: Permanently added '[ssh.kr.lolipop.jp]:2222' (RSA) to the list of known hosts.
my-acount-name@ssh.kr.lolipop.jp's password: 

すると、ホストとして登録しましたと表示され、パスワード入力画面に進みます。

lolipop管理画面のパスワードをコピペします。※入力内容は見えませんが、入力されています。

パスワードが照合できると以下のように、リモートサーバーにアクセスすることができます。

my-acount-name@ssh.kr.lolipop.jp's password: 
client_global_hostkeys_private_confirm: server gave bad signature for RSA key 0
[my-acount-name@std011 ~]$

以上で接続は完了です。


リモート操作

SSH接続ができている状態であれば、[SSHのアカウント名@std011 ~]がコマンド入力画面の前に表示されます。

なお、デフォルトでは「web」というディレクトリにいます。

[my-acount-name@std011 ~]$ ls
web

例えば、lolipop上ではwebディレクトリ配下に各プロジェクトがありファイルが保存されています。

「ls web/ディレクトリ」と入力すれば、リモートサーバーのディレクトリの内容を確認することができます。

[my-acount-name@std011 ~]$ ls web/prograshi
ads.txt       wp-activate.php       wp-content         wp-mail.php
index.php     wp-admin              wp-cron.php        wp-settings.php     
license.txt   wp-blog-header.php    wp-includes        wp-signup.php       
life          wp-comments-post.php  wp-links-opml.php  wp-trackback.php    
readme.html   wp-config-sample.php  wp-load.php        xmlrpc.php
welcome.html  wp-config.php         wp-login.php
[my-acount-name@std011 ~]$

このように、自分のローカル環境を操作しているのと同じように、リモートサーバーの環境を自分のパソコンで操作できるようになります。


リモートサーバー接続の入力コマンドの省略化

入力の省略化とは?

現状ではログイン時に「SSHアカウント名」「サーバー名」「ポート番号」の3つの情報を指定しなければいけません。

$ ssh <SSHアカウント名>@<サーバー名> -p 2222

さらにこの後にパスワードを入力する作業が非常に面倒です。ランダムかつ長すぎで覚えきれません、、

これを以下のコマンドを入力しただけで接続できるようにします。

$ ssh lolipop


省略化の手順

「ssh lolipop」コマンドだけでパスワードも入力せずに、リモートサーバーに接続できるようにするための手順は以下の4ステップになります。

リモートサーバーに接続の省略化手順
  1. 公開鍵と秘密鍵を作成する。
  2. 秘密鍵をssh-agentに登録する。
  3. 公開鍵をlolipopサーバーに登録する。
  4. ssh confingの設定。

「公開鍵」や「秘密鍵」など難しそうに見えますが、一つづつ順を追っていけば、思っているよりも簡単に設定できます。

公開鍵と秘密鍵の作成

.sshディレクトリに移動

SSHに関する接続先(ホスト)や公開鍵、秘密鍵などの情報はユーザーのルートディレクトリ配下の「.ssh」ディレクトリに保存します。

このため、公開鍵と秘密鍵を作成するコマンドを実行する前に、対象のディレクトリに移動します。

なお、「.ssh」の「.(ドット)」は隠しディレクトリであることを示しています。

$cd ~/.ssh


公開鍵と暗号鍵の生成

「.ssh」ディレクトリを移動したら「ssh-keygen」コマンドを使って公開鍵と暗号鍵を生成します。

「-C」オプションの後ろに、Githubで使用しているメールアドレスをつけます。

$ ssh-keygen -t ed25519 -C "your_email@example.com"

実行すると以下の3回で入力を求められます。

  1. どこにカギを作成するか(ファイルパスの確認)
  2. パスワードの設定
  3. パスワードの確認

指定された場所(.ssh/id_暗号化形式)にそのまま保存し、パスワードは空にすることが一般的です。

このため、単に3回Enterキーをクリックするといった記述もみかけます。

もちろんセキュリティレベルを上げるために、保存先を変更したりパスワードをかけることも非常に有効です。

注意点

秘密鍵は非常に重要なものなので、間違えて公開されているGithubのレポジトリにアップしたり、他人に渡すことが無いように厳重に管理してください。


-tオプションとは何か?

「ssh-keygen」の「-t」オプションは、作成する暗号化方法を指定するためのオプションです。

暗号化はデフォルトは「RSA」になっています。ここでは「ed25519」を指定しています。


ed25519とは何か?

「-t」オプションで指定している「ed25519」とは、暗号化方法の一つです。

より詳しく言うと「EdDSA(エドワーズ曲線デジタル署名アルゴリズム)」の中の一つです。

EdDSAは比較的新しい暗号で、RSAと比較し鍵の長さが短くセキュリティが高いといったメリットを持っています。

ただし、ed25519を使うには、OpenSSH 6.5以降であるといった条件があります。これらを満たせない場合はRSAを使用する必要があります。


-Cオプションとは何か?

「ssh-keygen」の「-C」オプションは、コメントを指定することができるオプションです。

デフォルトは「ユーザー名@ホスト名」となっています。

-Cをオプションを使用せずに、「ssh-keygen -t ed25519」として公開鍵と暗号鍵を作成することはできます。


実例

「ssh-keygen」を実行すると、以下のように、鍵が生成され、保存場所とパスワードを聞かれます。

基本的には全てEnterで問題ありません。

$ ssh-keygen -t ed25519 -C "example@gmail.com"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/c/Users/user/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /c/Users/user/.ssh/id_ed25519
Your public key has been saved in /c/Users/user/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:LUzTvf1111111111w75V0lYHH1ZT1l1z1K111X1 example@gmail.com
The key's randomart image is:
+--[ED25519 256]--+
|  .o.+o+++o.++o  |
|   o oooEoo=.o   |
|  .  o .+s..o+   |
|   ....o.00= .   |
|    =. .S o .    |
| . . oo  . o .   |
|o .  aa   .  oo  |
| +  .  a   dod . |
|  .     ..ase o..|
+----[SHA256]-----+

以上で公開鍵と暗号鍵の生成は完了です。

「ls」コマンドでファイルを確認すると「id_ed25519」と「id_ed25519.pub」が生成されていることがわかります。

$ ls
config  id_ed25519  id_ed25519.pub  known_hosts

「id_ed25519」が秘密鍵(超重要!)、「id_ed25519.pub」が公開鍵となります。拡張子「pub」はpublic(公開用)という意味です。


秘密鍵をssh-agentに登録する

ssh-agentとは何か?

「ssh-keygen」コマンドで生成した秘密鍵は非常に長くてランダムな文字列になっています。

▼秘密鍵の例(Xの部分がランダムなアルファベットや記号になっています)

$ cat id_ed25519
-----BEGIN OPENSSH PRIVATE KEY-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END OPENSSH PRIVATE KEY-----

これを毎回入力するのは非常に面倒です。

このため、公開鍵と秘密鍵の照合を代理で行ってくれる便利な機能として「ssh-agent」が用意されています。


ssh-agentの起動

「ssh-agent」以下のコマンドで起動します。

$ eval "$(ssh-agent -s)"


実例
$ eval "$(ssh-agent -s)"
> Agent pid 496

プロセスID(pid)が表示されればOKです。


秘密鍵をssh-agentに登録する

秘密鍵をssh-agentに登録します。「ssh-add」コマンドの引数で、生成した秘密鍵のパスを渡します。

$ ssh-add ~/.ssh/id_ed25519


実例
$ ssh-add ~/.ssh/id_ed25519
Identity added: /c/Users/user/.ssh/id_ed25519 (example@gmail.com)

「Identity added(ID追加)」が表示されれば完了です。先ほど「-C」オプションで指定した、コメント内容も表示されています。



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

「ssh-copy-id」コマンドを使って生成した公開鍵をリモートサーバーに置きます。

$ ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 <SSHアカウント名>@<サーバー名>

実行するとSSHへのアクセスパスワードを求められるので入力します。

なお、「-i」は対象となる公開鍵を選択するオプション、「-p」はリモートサーバーのポート番号を指定するオプションです。


実例

$ ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 my-account-name@ssh.lolipop.jp
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/c/Users/user/.ssh/id_ed25519.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
my-account-name@ssh.lolipop.jp's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh -p '2222' 'my-account-name@ssh.lolipop.jp'"
and check to make sure that only the key(s) you wanted were added.

これでローカルにあった公開鍵をリモート環境に登録することができました。

ためしにSSHに入って、ルートディレクトリを確認すると「.ssh」ディレクトリが追加されています。

$ ssh my-account-name@ssh.lolipop.jp -p 2222
[my-account-name@std011 ~]$ ls -a
.  ..  .bash_history  .dav.dir  .dav.pag  .ssh  web
[my-account-name@std011 ~]$ ls -a .ssh
.  ..  authorized_keys

「.ssh」ディレクトリ内の「authorized_keys」が公開鍵です。


ssh confingの設定

公開鍵をリモートサーバーに置いただけでは、SSH接続が簡単になりません。

「ssh lolipop」のみで接続できるようにするために、ssh配下の「config」ファイルを編集します。

VSCodeを使っている場合は以下のコマンドを入力します。

$ code ~/.ssh/config

Vimを使っている場合は以下のコマンドを入力します。

$ vi ~/.ssh/config
合わせて読みたい

Vimの使い方については下記をご参考ください。

【vi(vim)とは何か?】vimテキストエディタを使う方法とコマンド一覧


「config」ファイルを開いたら以下を記載します。

Host <好きな名前>
  HostName <サーバー名>
  User <SSHアカウント名>
  Port <ポート番号>

「好きな名前」には「lolipop」と入力します。保存して閉じれば設定は完了です。

ここでHostの横で指定した「好きな名前」を指定して、sshコマンドを実行すると、リモートサーバーに接続することができます。

$ ssh <好きな名前>


実例

configファイルの中身は以下のようになります。

Host lolipop
  HostName ssh.lolipop.jp
  User my-account-name
  Port 2222

保存して終了します。

「ssh lolipop」コマンドを入力すれば接続することができます。

$ ssh lolipop
[my-account-name@std011 ~]$ 

無事、リモートサーバーに接続できました。

以上で設定は完了です。


リモートサーバーから抜けるときは通常と同じく「exit」を入力し、Enterをクリックします。

[my-account-name@std011 ~]$ exit
ログアウト
Connection to ssh.lolipop.jp closed.

$



タイトルとURLをコピーしました