VM上のubuntuにssh接続する

windows

windowsからVM上のUbuntuとSSH接続する方法について記載します。
RSA暗号で鍵ペアを生成し、パスワードレスでログインできるようにしました。

環境

  クライアント Windows11HOME(192.168.19.1)
  SSHサーバ VM上のUbuntu24.04LTS(192.168.19.129)

サーバの準備

 ①Ubuntu上でSSHサーバが稼働しているか確認

> ssh -v
OpenSSH_9.6p1 Ubuntu-3ubuntu13.3, OpneSSL 3.0.13 30 Jan 2024 
 # 13.3 未満はCVS未対応ですのでバージョンを上げる必要があります

> sudo systemctl start ssh
○ ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/usr/lib/systemd/system/ssh.service; disabled; preset: ena> 
                                               # disabled:自動起動しない enable:自動起動
     Active: inactive (dead) # ← active:起動している inactive :起動していない
TriggeredBy: ● ssh.socket
       Docs: man:sshd(8)
             man:sshd_config(5)

 # 過去のCVE対応記事
  CVE-2024-6387(Ubuntu)の対応方法について | タンス (tansunohazama.sakura.ne.jp)

 ②sshサーバのインストール、アップデート
  OpenSSHには最近脆弱性が見つかっていますので、バージョンアップをしてください

# openssh-serverがインストールされていない
> sudo apt update
> sudo apt install openssh-server

# 旧verのopenssh-serverがインストールされているが、他のパッケージはアップデートできない
> sudo apt update
> sudo apt --only-upgrade install openssh-server

# 旧verのopenssh-serverがインストールされているが、すべてのパッケージをアップデートできる
> sudo apt update
> sudo apt upgrade

 ③openssh-serverの設定

  次のコマンドを使用して、openssh-serverの設定ファイルを編集し、待ち受けポートを設定します。

# openssh-server の設定ファイル編集
> sudo nano /etc/ssh/sshd_config
 # Port 22
 ↓
 Port 22

# 保存するのを忘れないこと

  ③openssh-server の起動

# 自動起動を有効にする
> sudo systemctl enable ssh

# sshサーバの起動
> sudo systemctl start ssh   # 起動
> sudo systemctl restart ssh # 再起動

# 確認
> ssh -v
OpenSSH_9.6p1 Ubuntu-3ubuntu13.4, OpneSSL 3.0.13 30 Jan 2024 
> ssh systemctl status ssh
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/usr/lib/systemd/system/ssh.service; enabled; preset: enab>
     Active: active (running) since Wed 2024-07-17 09:51:55 JST; 1min 44s ago
TriggeredBy: ● ssh.socket
       Docs: man:sshd(8)
             man:sshd_config(5)
    Process: 4897 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
   Main PID: 4898 (sshd)
      Tasks: 2 (limit: 3426)
     Memory: 3.3M (peak: 3.6M)
        CPU: 100ms
     CGroup: /system.slice/ssh.service
             ├─4364 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"
             └─4898 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

 Activeステータスが activeになっていることが確認できれば起動しています
 アプリケーションログの取得は次のコマンドです。

> sudo journalctl -u ssh
 7月 17 10:01:07 ubaxis-virtual-machine sshd[5003]: Received signal 15; terminating.
 7月 17 10:01:07 ubaxis-virtual-machine systemd[1]: ssh.service: Deactivated successfully.
 7月 17 10:02:10 ubaxis-virtual-machine systemd[1]: Starting ssh.service - OpenBSD Secure Shell server...
 7月 17 10:02:10 ubaxis-virtual-machine sshd[5155]: Server listening on :: port 22.
 7月 17 10:02:10 ubaxis-virtual-machine systemd[1]: Started ssh.service - OpenBSD Secure Shell server.

# ログが画面からはみ出す場合は、ファイル出力すると見やすい
> sudo hournalctl -u hhs > log.txt
> sudo nano log.txt  # 好きなエディタで確認

クライアントの準備

① 一度SSH接続してみる

 windowsからPowershell を起動し、次のように入力します。
 ここでは、ubuntuのログインユーザ名を「test_ssh_user」としています。

> ssh test_ssh_user@192.168.19.129
The authenticity of host '192.168.19.129 (192.168.19.129)' can't be established.
ED25519 key fingerprint is SHA256:*****************************************
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? y
Please type 'yes', 'no' or the fingerprint: yes
Warning: Permanently added '192.168.19.129' (ED25519) to the list of known hosts.
test_ssh_user@192.168.19.129's password:********
Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.8.0-38-generic x86_64)
:

Last login: Wed Jul 17 10:22:57 2024 from 192.168.19.1
test_ssh_user@????????-machine:~$  # (SSHによる接続が成功)
test_ssh_user@????????-machine:~$ exit
ログアウト
Connection to 192.168.19.129 closed.  # (接続終了)

 接続は成功しましたが、警告がちらほらと出ています。
 初回接続時には、警告が出るという仕組みになっているので気にする必要はありません。
 sshによる鍵情報は、
   C:\Users\ログインユーザ名\.ssh
     known_hosts
に勝手に作成されます。
 内容を確認すると標準ではrsa暗号を使用してキーを生成していました。

② 鍵のペア(秘密鍵、公開鍵)を生成する

 次の方法を使って鍵を生成します。
 鍵ペアを生成するメリットは、
   暗号化の強度が高まりセキュリティが向上
   ログイン時にパスワードを入力しないので作業効率の向上
です、やることがわかっていればそれほど難しくないので、やった方がいいと思います。

# windowsで鍵ペアを生成する
# こだわる方は、暗号を変えたり強度も変えることができます

> ssh-keygen -t rsa -b 4096 -C "test_ssh_user@192.168.19.129"
Generating public/private rsa key pair. # rsa暗号で鍵を作ります
Enter file in which to save the key (C:\Users\ユーザ名/.ssh/id_rsa): # そのままエンター
C:\Users\ユーザ名/.ssh/id_rsa already exists.  # すでに鍵があるよ
Overwrite (y/n)? y # 上書きしてもいい?
Enter passphrase (empty for no passphrase): # パスワードレスにするなら空欄でOK。パスワードレスにしたくない場合はsshログイン用パスワードを設定
Enter same passphrase again: # パスワードをもう一度入力
Your identification has been saved in C:\Users\ユーザ名/.ssh/id_rsa # 秘密鍵の保存場所
Your public key has been saved in C:\Users\ユーザ名/.ssh/id_rsa.pub # 公開鍵の保存場所 
The key fingerprint is:
SHA256:************************************ test_ssh_user@192.168.19.129
The key's randomart image is: 
:

③公開鍵をサーバに送信する

生成した公開鍵を、SSHサーバにあらかじめ送っておきます。
windowsのpowershellから次のコマンドを実行して、公開鍵をサーバにSSH通信で送ります。

# windowsから公開鍵をsshサーバに送信

> cat ~/.ssh/id_rsa.pub | ssh test_ssh_user@192.168.19.129 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys'

送信された公開鍵は、ubuntuの
  /home/test_ssh_user/.ssh
    authorized_keys
に保存されています。(パーミッションは644)

SSHで接続ができない時

考えられる原因

 ① SSHの再起動がうまくいっていない(残留プロセスが起動を阻害?)
   私もこの症状に悩まされましたが、次のコマンドでSSHサービスを一度停止させたところ正常起動しました。

# ssh と名がつくプロセスを表示
>  sudo ps aux | grep ssh

# プロセスを強制的にKILL ※自己責任でお願いします
> sudo kill <PID>

# サービスの起動
sudo systemctl start ssh

 ②ファイヤーウォールでブロックされている
  ファイヤーウォールが起動していればPASS設定にする必要があります

# ファイヤーウォールの起動を確認
> sudo ufw status
状態: 非アクティブ # 当環境では起動していませんでした

# ファイヤーウォールが起動していれば22番ポートを開放
> sudo ufw allow 22

SSHによる接続

windowsのPowershellから次のコマンドでSSH通信を開始することができます。

# SSHによるサーバログイン
> ssh test_ssh_user@192.168.19.129
Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.8.0-38-generic x86_64)
Last login: Wed Jul 17 10:52:57 2024 from 192.168.19.1
> (ログインが成功)

鍵のペアを生成した時に、パスワードレスにした方はパスワードがなくてもログインできるはずです。
SSH専用のPINコード的なパスワードを設定するのもアリかもしれません。

powershellからSSH接続した様子

反応も悪くないし、今のところ使いやすくていい感じです。
Powershell イイネ!