ssh コマンド:セキュアに接続する

コマンドの概要

 「ssh」(Secure Shell)コマンドは、ネットワーク上で安全にリモートシェル接続を確立するためのプロトコルおよびユーティリティです。SSHプロトコルを使用してリモートホストに安全にログインし、ファイルの転送やリモートコマンドの実行など、様々なネットワーク操作を行うことができます。多くのディストリビューションでデフォルトで使用することができます。

コマンドの主なオプションと説明

オプション説明
-l ユーザー名リモートユーザー名を指定する。
-p ポート番号リモートポート番号を指定する。
-i 秘密鍵ファイル認証に使用する秘密鍵ファイルを指定する。
-XX11転送を有効にする。
-xX11の転送を無効にする。
-C圧縮を有効にする
主なオプションと説明

sshでの接続

ssh でホストと接続するには、以下の書式でコマンドを実行します。

【書式】

ssh[ユーザー名@]接続先ホスト名 または IPアドレス

ここでは、自身のPCに接続する方法を解説していきます。

1.自身のPCのIPアドレスを調べます。

・ifconfig コマンドを実行します。

「user01」というユーザーでログインしています。

ここで使用しているPCは、学習用の仮想マシンなので、IPアドレスは「10.0.2.15」となっています。

[user01@localhost ~]$ ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
        inet6 fe80::f837:d171:c269:5035  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:57:5d:71  txqueuelen 1000  (Ethernet)
        RX packets 87826  bytes 130004256 (123.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6204  bytes 386022 (376.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 68  bytes 5896 (5.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 68  bytes 5896 (5.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:88:d4:47  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

・ping コマンドで疎通確認しておきます。

[user01@localhost ~]$ ping 10.0.2.15
PING 10.0.2.15 (10.0.2.15) 56(84) bytes of data.
64 bytes from 10.0.2.15: icmp_seq=1 ttl=64 time=0.075 ms
64 bytes from 10.0.2.15: icmp_seq=2 ttl=64 time=0.059 ms
64 bytes from 10.0.2.15: icmp_seq=3 ttl=64 time=0.034 ms
64 bytes from 10.0.2.15: icmp_seq=4 ttl=64 time=0.035 ms
64 bytes from 10.0.2.15: icmp_seq=5 ttl=64 time=0.039 ms
64 bytes from 10.0.2.15: icmp_seq=6 ttl=64 time=0.044 ms
^C
--- 10.0.2.15 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 4998ms
rtt min/avg/max/mdev = 0.034/0.047/0.075/0.016 ms

ping は通ります。

2.ssh での初回接続

 SSHでは、ホスト認証という仕組みを導入することで、ホストの偽装による偽サーバーへの接続を防ぎます。この仕組みにより、クライアントが正規のサーバーと通信していることを確認し、安全な通信を確保します。

 ホスト認証は、クライアントが特定のサーバーに初めて接続する際に行われます。初回接続時には、クライアントはサーバーのホストキー(ホストの公開鍵)を受け取ります。このホストキーは、サーバーの識別情報として利用されます。クライアントは、ホストキーをローカルに保存し、以降の接続時に使用します。

 初回接続時にホスト認証用のデータがない場合、クライアントはユーザーに対して警告を表示し、ユーザーにホストキーの保存を求めます。ユーザーが承認すると、クライアントはホストキーを保存し、以降の接続時に使用します。

 ホスト認証には、クライアントがサーバーのホストキーを保存するためのファイルが利用されます。一般的には、クライアントのホームディレクトリに「.ssh/known_hosts」というファイルがあり、ここにホストキーが保存されます。これにより、クライアントは以前に接続したサーバーのホストキーを確認し、信頼できるサーバーとの通信を確立します。

3.「ssh taro@10.0.2.15」で初回接続する。

・「ssh taro@10.0.2.15」で初回接続します。

 Linuxには「user01」でログインしていますが、「taro」でホスト「10.0.2.15」に接続します。

[user01@localhost ~]$ ssh taro@10.0.2.15 # taroでSSH接続します。
The authenticity of host '10.0.2.15 (10.0.2.15)' can't be established.
ECDSA key fingerprint is SHA256:S1D7Hcw0FvbMdb4j/Tp3nW3GBJXa5FYqlWmFngR+6UQ.
ECDSA key fingerprint is MD5:e9:63:7b:ce:88:ee:af:87:33:4b:a6:88:51:e0:11:c5.
Are you sure you want to continue connecting (yes/no)? yes # 
Warning: Permanently added '10.0.2.15' (ECDSA) to the list of known hosts.
taro@10.0.2.15's password: # パスワードを入力します。
Last login: Fri Jan 19 01:32:31 2024
[taro@localhost ~]$ # taroでSSH接続できました。

taroでSSH接続できました。

4.SSH接続を終了する。

SSH接続を終了するには、exit コマンドを実行します

・exit コマンドを実行します。

[taro@localhost ~]$ exit
ログアウト
Connection to 10.0.2.15 closed.
[user01@localhost ~]$ 

SSH接続が終了して、user01のプロンプトに戻ります。

5.SSHで2回目以降の接続を行います。

・「ssh taro@10.0.2.15」で2回目のSSH接続します。

[user01@localhost ~]$ ssh taro@10.0.2.15
taro@10.0.2.15's password: # パスワードを入力します。
Last login: Fri Feb 23 16:53:33 2024 from 10.0.2.15
[taro@localhost ~]$ # taroでSSH接続できました。

2回目からは、パスワードを入力するだけでログインできました。


 「ssh」コマンドは、セキュアなリモート接続を提供し、ネットワーク管理者やシステム管理者がリモートシステムに安全にアクセスするための重要なツールです。データの暗号化や認証などのセキュリティ機能を提供し、信頼性の高いリモートアクセスを実現します。

SSHの仕組みについて

ホスト認証について

  SSHでは、ホスト認証と呼ばれる仕組みを導入しています。これは、クライアントが正規のサーバーと通信していることを確認し、ホストの偽装や中間者攻撃から保護するための重要な仕組みです。初回接続時には、クライアントがサーバーのホストキー(公開鍵)を受け取り、以降の接続時に使用します。ホストキーはクライアントのローカルマシンに保存され、サーバーとの信頼性を確認するために利用されます。

公開鍵認証について

  SSHでは、公開鍵認証というパスワードを使用せずに認証を行う仕組みも提供しています。公開鍵認証では、クライアントがサーバーに公開鍵を送信し、サーバーはその公開鍵を使用してクライアントを認証します。この際、秘密鍵と呼ばれる対になる鍵をクライアントが保持しており、これを使用して認証を行います。公開鍵認証を使用することで、パスワードが盗まれた場合でも、第三者がクライアントになりすますことが困難になります。

暗号化について

 SSHの通信はすべて暗号化されているため、データが盗聴されても安全です。SSHは公開鍵暗号や対称鍵暗号などの暗号化技術を使用して通信を保護します。これにより、パスワードや重要なデータの送信時にも安全な通信が確保されます。

公開鍵認証の設定

  公開鍵認証を使用するためには、まずクライアントとサーバー間で公開鍵と秘密鍵のペアを生成し、クライアントの公開鍵をサーバーに登録する必要があります。その後、クライアントは秘密鍵を使用してサーバーに対して認証を行います。公開鍵認証を使用することで、より高度なセキュリティを実現できます。 


 以上のように、SSHはホスト認証や公開鍵認証などのセキュリティ機能を提供し、安全なリモートアクセスを実現します。これにより、ネットワーク上の通信やリモート操作が安全に行われるため、企業や個人の情報セキュリティの向上に貢献しています。