SSHとは?設定から接続方法まで詳しく解説

SSHとは?
SSHとはSecure Shellと言う言葉から名付けられた、安全にリモート接続を行うためのプロトコルです。他のリモート接続方法としてTelnet
などがありますが、これらでリモート接続を行う場合は、通信内容はそのままネットワークに流れることになります。SSHを用いれば、パスワードを含む全ての通信内容は暗号化され、通信経路上における盗聴やデータの改ざんを防ぐことができます。また、認証に鍵データを利用することで、パスワードの漏えいによるなりすましも防ぐことができます。この記事では、SSH通信で公開鍵認証方式によるリモート接続が出来るようになることを目標とし、接続先となるSSHサーバーの設定や、接続元となるパソコンなどのコンピュータ上でのsshコマンドの使い方や、鍵データの作成方法を説明します。
SSHサーバーの起動方法
SSH接続を行うためには、接続を受け付けるSSHサーバーが必要です。クラウドサーバーやレンタルサーバーを利用していて、SSHで接続することが前提となっている場合には、SSHサーバーは既に起動しているはずです。この記事では、Ubuntu 18.04.3
を最小構成でインストールした状態から始めることを想定して説明します。SSHサーバーのインストール方法や設定ファイルの場所は、Linuxディストリビューションによって異なる可能性があります。ご了承ください。
SSHサーバーのインストール
Ubuntuを最小構成でインストールした場合には、SSHサーバーはインストールされていません。以下のようにapt
コマンドでインストールします。
1
|
[サーバー側で実行]user1@host1:~$ sudo apt install sshパッケージリストを読み込んでいます... 完了依存関係ツリーを作成しています 状態情報を読み取っています... 完了以下のパッケージが自動でインストールされましたが、もう必要とされていません: fonts-liberation2 fonts-opensymbol gir1.2-geocodeglib-1.0 gir1.2-gst-plugins-base-1.0 gir1.2-gstreamer-1.0 gir1.2-gudev-1.0 gir1.2-udisks-2.0 grilo-plugins-0.3-base gstreamer1.0-gtk3 : systemd (237-3ubuntu10.25) のトリガを処理しています ...ufw (0.36-0ubuntu0.18.04.1) のトリガを処理しています ...user1@host1:~$
|
インストールした直後からSSHサーバーは起動した状態になります。systemctl status sshd
と入力して確認しましょう。
1
|
[サーバー側で実行]user1@host1:~$ systemctl status sshd● ssh.service - OpenBSD Secure Shell server Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: ena Active: active (running) since Thu 2020-04-23 20:33:36 JST; 1min 14s ago Main PID: 4393 (sshd) Tasks: 1 (limit: 1728) CGroup: /system.slice/ssh.service └─4393 /usr/sbin/sshd -D :user1@host1:~$
|
Active: active (running)
と表示されていれば、SSHサーバーは起動しています。もし、Active: inactive (dead)
と表示されている場合は、インストールはされているが起動していない状態です。その場合はsudo systemctl start sshd
と入力して、SSHサーバーを起動してください。注意点を説明しますと、SSHサーバーが起動している状態ですでに、パスワードを利用して外部からSSH接続ができるようになっています。インターネット経由で外部からの接続を受け付ける環境では、この瞬間からSSHサーバーのデフォルトの待ち受けである22番ポートに向かって、アタック(ログインを試みようとする攻撃)が行われる可能性があります。よって最初の設定作業を行う場合は、インターネットからの接続を受け付けない環境か、ファイアウォールなどの機能で、不正なアクセスを防ぐ環境下で行ってください。
パスワード使用したsshコマンドによるログイン
これからの設定作業を行うために、まずはパスワードを使用してsshコマンドでログインします。LAN内の他のコンピューターなどから、SSHクライアントアプリケーションを使用して接続してください。ここでは別のコンピューターから、Linuxのsshコマンドを使用して接続します。この記事では、後の鍵ファイルを使用する手順のために、まずはパスワードによる接続を行っていますが、もし公開鍵データをクライアントからサーバーに送信する方法が他に存在する場合は、後述するSSHサーバーの設定で、インストール直後からパスワードによるログインを無効にした方がより安全です。sshコマンドでログインするには、引数にユーザー名と接続先のサーバー名またはIPアドレスを@
で繋いだ文字列を指定します。
1
|
[クライアント側で実行]user2@client1:~$ ssh user1@xxx.xxx.xxx.xxxThe authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established.ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added 'host1' (ECDSA) to the list of known hosts.user1@xxx.xxx.xxx.xxx's password: Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 5.0.0-23-generic x86_64) :user1@host1:~$
|
クライアントから初めてアクセスするサーバーの場合、"Are you sure ... connecting?"
と確認が出ますが、yes
と入力してください。そして、続いて"user1@xxx.xxx.xxx.xxx's password:"
と表示されパスワードの入力を求められます。指定したLinuxユーザーのパスワードを入力してください。なお、キーボードからタイプしても、パスワードの文字列は表示されないようになっています。ログインに成功すると、接続先のサーバーのシェルが起動し、コマンドラインで入力を受け付ける状態になります。パスワードでログインできることが確認できたら、ログアウトして大丈夫です。コマンドラインでexit
と入力してログアウトし、SSHクライアントを終了してください。
鍵ファイルを使用したsshコマンドの実行方法
ここまででSSHサーバーが正常に稼働し、パスワードでログインできるようになりました。しかし、パスワードによる認証はパスワードが漏えいする可能性や、パスワードを予測してログインを試みるような攻撃を受ける可能性があります。そこで、より安全性を高めるために鍵ファイルを使用してSSH接続を行い、パスワードによるログインを無効にします。
鍵ファイルの生成
SSH接続に使用する鍵ファイルを作成します。以下の作業は、クライアントマシン上で実行してください。環境はクライアント側もLinuxを想定しています。もし、クライアント側の環境にSSHクライアント用のパッケージがインストールされていない場合は、インストールしてください。Ubuntu
の場合はsudo apt install openssh-client
でインストールできます。鍵ファイルの生成にはssh-keygen
コマンドを使用します。
1
|
[クライアント側で実行]user2@client1:~$ ssh-keygen -t rsa -b 4096 -f my_ssh_keyGenerating public/private rsa key pair.Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in my_ssh_key. :+----[SHA256]-----+user2@client1:~$
|
-t
オプションは作成する鍵の種類です。rsa
を指定してください。-b
オプションは鍵の大きさです。値が大きいほど複雑な鍵となり安全性が増しますが、4096という数字で十分です。-f
オプションは生成される秘密鍵ファイルの名前です。任意の名前でよいですが、ここではmy_ssh_key
という名前にします。コマンドを実行すると、Enter passphrase (empty for no passphrase):
という表示でパスフレーズの入力を求められます。パスフレーズを設定すると、鍵を使ってSSH接続をする際にそのパスフレーズを入力する必要があります。つまり鍵を使うためのパスワードです。この手順ではパスフレーズは設定せず、入力無しでSSH接続することとします。パスフレーズを設定しない場合は、何も入力せずそのままエンターキーを押してください。確認用のEnter same passphrase again:
の入力もそのままエンターキーを押してください。コマンドの実行が完了すると、カレントディレクトリに指定した通りmy_ssh_key
という鍵ファイルと、もう一つmy_ssh_key.pub
というファイルの合計2ファイルが作成されます。my_ssh_key
はSSH接続する際に使用する秘密鍵です。このファイルは利用者だけが持つべきもので、外部に公開してはいけません。対して、my_ssh_key.pub
は公開鍵です。このファイル内の情報を接続先サーバーに登録して、認証を行うことになります。
公開鍵の登録
SSHサーバーに鍵ファイルを用いて接続をするためには、事前にクライアントが使用する秘密鍵と対になる公開鍵をサーバーに登録しておく必要があります。ここでは登録を行うために、まずはscp
コマンドを使用してパスワードを用いたSSH接続で公開鍵ファイルをサーバーに送信することとします。
1
|
[クライアント側で実行]user2@client1:~$ scp my_ssh_key.pub user1@xxx.xxx.xxx.xxx:~user1@xxx.xxx.xxx.xxx's password: my_ssh_key.pub 100% 742 1.3MB/s 00:00 user2@client1:~$
|
scp
コマンドは第1引数にコピー元のファイル、第2引数に接続先ユーザー名@接続先ホスト名またはIPアドレス:接続先のコピー先ディレクトリ
と指定します。これで公開鍵が接続先サーバーに送信されましたが、まだ登録は完了していません。引き続きサーバー側で作業を行います。先ほどの作業で、サーバー側のuser1
のホームディレクトリにはscp
でコピーされたmy_ssh_key.pub
があります。この公開鍵の内容を~/.ssh/authorized_keys
ファイルに追記してください。
1
|
[サーバー側で実行]user1@host1:~$ cat my_ssh_key.pub >> .ssh/authorized_keys
|
初めてこの作業を行う場合は、まだauthorized_keys
が存在しておらず、上記コマンドを実行することで作成されます。これでサーバー側の登録作業は完了です。正しく登録されていれば、先ほど生成した秘密鍵を使ってクライアントからSSH接続ができます。
1
|
[クライアント側で実行]user2@client1:~$ ssh -i my_ssh_key user1@xxx.xxx.xxx.xxxWelcome to Ubuntu 18.04.3 LTS (GNU/Linux 5.0.0-23-generic x86_64) :user1@host1:~$
|
-i
オプションで秘密鍵ファイルを指定することで、パスワード無しでログインできるようになります。
パスワード接続を無効にする
鍵ファイルを使用したSSH接続に成功したならば、パスワードによるSSH接続を無効にしてセキュリティを高める方がよいでしょう。そのためには、SSHサーバーの設定ファイルを編集します。SSHサーバーの設定ファイルは/etc/ssh/sshd_config
です。これをテキストエディターで開いてください。
1
|
[サーバー側で編集]/etc/ssh/sshd_config :# To disable tunneled clear text passwords, change to no here!#PasswordAuthentication yesPasswordAuthentication no#PermitEmptyPasswords no :
|
#PasswordAuthentication yes
という行があります。デフォルトではパスワードログインを許可する設定になっていますので、PasswordAuthentication no
という行を追加してパスワードログインを無効にします。設定ファイルの編集が完了したら、SSHサーバーをリロードしてください。
1
2
|
[サーバー側で実行]user1@host1:~$ sudo systemctl reload sshd</code>
クライアント側でパスワードによる接続を試して、接続が拒否されれば設定は正しく反映されています。<pre><code>[クライアント側で実行]user2@client1:~$ ssh user1@xxx.xxx.xxx.xxxuser1@xxx.xxx.xxx.xxx: Permission denied (publickey).user2@client1:~$
|
サーバー管理はSSHでセキュアに
SSHサーバーのインストール/起動方法から、公開鍵認証方式によるSSHログインまでを説明してきました。Linuxサーバー管理においては、新たにユーザーを登録しSSH接続を許可することもあるでしょう。SSHサーバーの設定方法やクライアントの接続方法を知ることは、正しくシステムを管理するための第一歩とも言えます。また、コンピューターやサービスのクラウド化が進む現在、クライアントとしてインターネットを経由して遠隔地にあるサーバーに接続する機会は増えています。そのような環境において、通信内容を守るためにはSSHによる接続は必須です。コンピューターの性能の向上や技術の向上により、パスワードによる認証は安全性が高いとは決して言えなくなっています。セキュアにリモート接続を行うために、ぜひ公開鍵認証方式でSSHを利用することをお勧めします。
FEnetを運営しているネプラス株式会社はサービス開始から10年以上
『エンジニアの生涯価値の向上』をミッションに掲げ、
多くのインフラエンジニア・ネットワークエンジニアの就業を支援してきました。
ネプラス株式会社はこんな会社です
秋葉原オフィスにはネプラス株式会社をはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
インフラ業界に特化
ネットワーク・サーバー・データベース等、ITインフラ業界に特化。Cisco Systemsプレミアパートナーをはじめ各種ベンダーのパートナー企業です。
業界を知り尽くしているからこそ大手の取引先企業、経験豊富なエンジニアに選ばれています。
-
正社員なのにフリーランスのような働き方
正社員の方でも希望を聞いたうえでプロジェクトをアサインさせていただいており、フリーランスのような働き方が可能。帰社日もありません。
プロジェクト終了後もすぐに次の案件をご紹介させていただきますのでご安心ください。
-
大手直取引の高額案件
案件のほとんどが大手SIerやエンドユーザーからの直取引のためエンジニアの皆様へに高く還元できています。
Ciscoをはじめ、Juniper、Azure、Linux、AWS等インフラに特化した常時300件以上の案件があります。
-
スキルアップ支援
不要なコストを削減し、その分エンジニアの方へのスキルアップ支援(ネットワーク機器貸出、合格時の受験費用支給など)や給与で還元しています。
受験費用例)CCNP,CCIE:6-20万円、JNCIS:3-4万円、AWS:1-3万円など
※業務に関連する一定の資格のみ。各種条件がありますので詳しくは担当者へにお尋ねください。
-
現給与を保証します!※
前職の給与保証しており、昨年度は100%の方が給与アップを実現。収入面の不安がある方でも安心して入社していただけます。
※適用にはインフラエンジニアの業務経験1年以上、等一定の条件がございます。
-
インセンティブ制度
ネットワーク機器の販売・レンタル事業等、売上に貢献いただいた方にはインセンティブをお支払いしています。
取引先企業とエンジニア側、双方にメリットがあり大変好評をいただいています。
-
社会保険・福利厚生
社員の方は、社会保険を完備。健康保険は業界内で最も評価の高い「関東ITソフトウェア健康保険組合」です。
さらに様々なサービスをお得に利用できるベネフィットステーションにも加入いただきます。
-
東証プライム上場企業グループ
ネプラスは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
ネプラス株式会社に興味を持った方へ
ネプラス株式会社では、インフラエンジニアを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
オンライン面接も随時受付中。ぜひお気軽にご応募ください。


新着案件New Job
-
【高額年収】/【CCNA取得者歓迎】/ネットワークの構築/BIG-IP/東京都千代田区/【WEB面談可】/在宅ワーク/20代~30代の方活躍中
年収540万~540万円東京都千代田区(神保町駅) -
東京都中央区/【WEB面談可/インフラサーバ経験者/20~40代の方活躍中】/在宅ワーク
年収600万~600万円東京都中央区(小伝馬町駅) -
【高額年収】/インフラ構築支援/東京都港区/【WEB面談可/インフラサーバ経験者/20~40代の方活躍中】/在宅ワーク
年収960万~960万円東京都港区(新橋駅) -
ガバナンス推進、セキュリティ基盤支援/東京都港区/【WEB面談可】/在宅ワーク/20代~40代の方活躍中
年収780万~780万円東京都港区(新橋駅) -
カー用品販売会社の情報システム運用/東京都千代田区/【WEB面談可/インフラサーバ経験者/20~40代の方活躍中】/テレワーク
年収576万~576万円東京都千代田区(水道橋駅) -
ネットワーク構築、検証/東京都渋谷区/【WEB面談可】/テレワーク/20代~40代の方活躍中
年収540万~540万円東京都渋谷区(渋谷駅)