SEワンタンの独学備忘録

IT関連の独学した内容や資格試験に対する取り組みの備忘録

【LPIC102】LinuxにおけるSSH接続と公開鍵認証 LPICで学ぶLinux17


SSH(Secure Shell)はセキュアなリモート間接続を行うための一般的なプロトコルです。
クライアントからサーバへの接続に使用したりサーバ間の接続を行う際にも使用されます。

リモート間接続にはtelnetと呼ばれるプロトコルもありますが、現在では認証機能や暗号化が実装されているSSHを使用することが一般的であると思います。

LinuxではSSHの実現にはオープンソースであるOpenSSHが使用されることが一般的です。

ssh関連コマンド

sshコマンド

sshコマンドはSSH接続を行うためのコマンドです。
またクライアントとしてリモート接続を行う以外にもオプションによってポートフォワーディングなどを行うこともできます。

■主要オプション一覧

オプション 内容
-p 接続先のポート番号を指定
-l 接続ユーザを指定
-i 秘密鍵のファイルを指定
-o ssh_conifgの設定をオプションで指定
-X ローカルポートフォワーディングを有効化

■ユーザを指定してssh接続する

ユーザを指定する方法はいくつかあります。

・@で指定
最も一般的な方法だと思っています。

[wantan@server1 ~]$ ssh testuser@192.168.142.11

・「-l」オプションで指定

[wantan@server1 ~]$ ssh -l testuser 192.168.142.11

・「-o」オプションで指定
「-o」はやや特殊なオプションで、ssh_configファイルで設定可能な項目を指定できます。
今回はユーザ名なので、「User」を指定する。

[wantan@server1 ~]$ ssh -o User=testuser 192.168.142.11


■ポートフォワーディングを有効化する

sshコマンドを用いて、特定のポートを別のポートに転送するポートフォワーディングを実現することができます。
コマンドは以下の通りです。

[root@server1 testuser]# ssh -L 8888:localhost:80 testuser@192.168.142.11

少し試してみます。

ここでは簡易的に一台のサーバで完結させ、扱い慣れているhttpによって確認を行います。
teraterm1をクライアントと見立てて、teraterm2でポートフォワーディングを行います

f:id:wantanBlog:20210127000940p:plain

以下のようにhttpリクエストで返却するコンテンツを用意しておきます。
httpdの起動⇒test.htmlの配置を事前準備として行っています。
test.htmlは「hello apache」とだけ記述したファイルになります。

・teraterm1から80番ポートにアクセス

[root@server1 conf]# curl http://localhost/test.html
hello apache

この状態では、80番ポートでリッスンしているので当然ながら他のポート番号を指定してもレスポンスがうまく返りません。

・teraterm1から8888番ポートにアクセス

[root@server1 conf]# curl http://localhost:8888/test.html
curl: (7) Failed connect to localhost:8888; 接続を拒否されました

ポートフォワーディングを有効化します。

・teraterm2でポートフォワーディングを有効化

[root@server1 testuser]# ssh -L 8888:localhost:80 testuser@192.168.142.11
testuser@192.168.142.11's password:
Last login: Tue Jan 26 23:23:18 2021 from server1.test
[testuser@server1 ~]$

また、8888番ポート宛てにアクセスを行ってみると今度は80番ポートに接続したときにと同様の内容が返ってきていることがわかります。

・teraterm1から8888番ポートにアクセス

[root@server1 conf]# curl http://localhost:8888/test.html
hello apache

またはネットワーク分野で学んだnmapコマンドでリッスンポートを確認してみてもいいでしょう。

[root@server1 conf]# nmap localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2021-01-26 23:54 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000020s latency).
Other addresses for localhost (not scanned): 127.0.0.1
Not shown: 994 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
25/tcp   open  smtp
80/tcp   open  http
631/tcp  open  ipp
3306/tcp open  mysql
8888/tcp open  sun-answerbook

Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds
[root@server1 conf]#

多少実用的に使用するなら実際にはいくつかのサーバを経由させる形で以下のように使うみたいです。

f:id:wantanBlog:20210127002214p:plain

ssh-agent コマンド

ssh-agentコマンドはLinuxの交換鍵認証において、メモリ上に秘密鍵をパスフレーズを解除した状態で保持し(この表現が完全に正しいかは微妙です)、SSH接続における秘密鍵のパスフレーズ入力を省略するためのコマンドになります。

■ssh-addコマンド
また、ssh-addコマンドがほぼ必須で合わせて使用されます。
こちらはメモリ上に実際に秘密鍵を登録するコマンドです。

f:id:wantanBlog:20210131020002p:plain

・ssh-agentの起動
起動時にはシェルを引数として起動します。

[wantan@client .ssh]$ ssh-agent bash

・秘密鍵の登録
メモリ上に秘密鍵を登録します。

[wantan@client .ssh]$ ssh-add
Enter passphrase for /home/wantan/.ssh/id_rsa:
Identity added: /home/wantan/.ssh/id_rsa (/home/wantan/.ssh/id_rsa)
||>

<b>・秘密鍵一覧の確認</b>

>|sh|
[wantan@client .ssh]$ ssh-add -l
2048 SHA256:5ytOx1z1s6V7qyrBg6fCyrDFx/87u4y1CK/uk5Wosok /home/wantan/.ssh/id_rsa (RSA)

・ssh-agentの停止
停止には「-k」オプションを付与します。

[wantan@client ~]$ ssh-agent -k
unset SSH_AUTH_SOCK;
unset SSH_AGENT_PID;
echo Agent pid 2288 killed;

詳細については以下の記事もぜひご確認ください。
www.wantanblog.com

ssh-keygen

ssh-kegenコマンドは公開鍵認証に使用する鍵ペアを生成するコマンドです。
鍵ペアなので、秘密鍵公開鍵の2種を生成します。

オプションなしでも普通に実行できますが、一応オプションを確認しておきます。

■主要オプション

オプション 内容
-t 暗号化タイプの指定
-p パスフレーズの指定
-b ビット長の指定
-f 鍵ファイルを指定

-t」オプションで使用する暗号化の種類には主なものとして以下のような種類があります。
詳細はともかく、使用できる暗号化方式は把握しておいた方がよいでしょう。
私的に聞きなれないのは以下ではED25519ぐらいでしょうか。

  • RSA
  • DSA
  • ECDSA
  • ED25519

・暗号化方式を指定する

[testuser@server1 ~]$ ssh-keygen -t ecdsa
Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/testuser/.ssh/id_ecdsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/testuser/.ssh/id_ecdsa.
Your public key has been saved in /home/testuser/.ssh/id_ecdsa.pub.
The key fingerprint is:
SHA256:Ab5DrMBdeX0mDLY2dC+A0ReK/ZxHf+uWN1IiU/jBPiA testuser@server1.test
The key's randomart image is:
+---[ECDSA 256]---+
|      +==+o.     |
| . . +o*o==.o    |
|  o . =.B..+=    |
|   . o o E * =   |
|    . o S = * o .|
|       .   + = o.|
|            o +..|
|             ..+.|
|              o.o|
+----[SHA256]-----+
[testuser@server1 ~]$

鍵の生成場所はデフォルトであれば~/.ssh/で、id_ecdsa(公開鍵)とid_ecdsa.pub(公開鍵)の2種が生成されます。
鍵の命名についてはデフォルトであれば、ecdsa部分がそれぞれの暗号化方式になります。

Linuxにおける公開鍵認証

試験的には公開鍵認証により実現する認証として、「ホスト認証」と「ユーザ認証」を抑えておけば概ね問題ないかと思います。
ここでは、時間等の都合で割愛します。

関連ファイルのみ示しておきます。

以下は参考まで。

共通鍵暗号と公開鍵暗号とは
Linux - 暗号化によるデータの保護

関連ファイルについて

■SSHクライアント
・設定ファイル
/etc/ssh/ssh_config
・秘密鍵
~/.ssh/id_rsa
・公開鍵
~/.ssh/id_rsa.pub
・認証鍵リスト
~/.ssh/known_hosts

■SSHサーバ
・設定ファイル
/etc/ssh/sshd_config
・秘密鍵
/etc/ssh/ssh_host_rsa_key
・公開鍵
/etc/ssh/ssh_host_rsa_key.pub
・認証鍵リスト
~/.ssh/authrized_keys


・前回(第十六回)
www.wantanblog.com


・次回(第十八回)
www.wantanblog.com