[Linux Lite] ssh サーバのインストールと設定と ssh クライアントの設定
ふとした疑問
パッケージ名に ssh と openssh-server の 2 つがあることに気がついた。何か違いがあるのだろうか?aptitude コマンドで確認してみた。
$ aptitude show ssh パッケージ: ssh バージョン: 1:8.2p1-4ubuntu0.1 状態: インストールされていません 複数アーキテクチャ対応: 他 優先度: 任意 セクション: net メンテナ: Ubuntu Developers ubuntu-devel-discuss@lists.ubuntu.com アーキテクチャ: all 展開サイズ: 120 k 依存: openssh-client (>= 1:8.2p1-4ubuntu0.1), openssh-server (>= 1:8.2p1-4ubuntu0.1) 事前依存: dpkg (>= 1.17.5) 提供: ssh:i386 (= 1:8.2p1-4ubuntu0.1) 説明: secure shell クライアントおよびサーバ (メタパッケージ) 本メタパッケージは、OpenSSH クライアントおよび OpenSSH サーバの両方をインス トールする簡便な手段を提供します。本パッケージ内には何も含まれていません し、本パッケージは何もしません。そのため、本パッケージに他のパッケージが依 存していなければ削除して構いません。 ホームページ: http://www.openssh.com/ $
$ aptitude show openssh-server パッケージ: openssh-server バージョン: 1:8.2p1-4ubuntu0.1 状態: インストールされていません 複数アーキテクチャ対応: 他 優先度: 任意 セクション: net メンテナ: Ubuntu Developers ubuntu-devel-discuss@lists.ubuntu.com アーキテクチャ: amd64 展開サイズ: 1,527 k 依存: adduser (>= 3.9), dpkg (>= 1.9.0), libpam-modules (>= 0.72-9), libpam-runtime (>= 0.76-14), lsb-base (>= 4.1+Debian3), openssh-client (= 1:8.2p1-4ubuntu0.1), openssh-sftp-server, procps, ucf (>= 0.28), debconf (>= 0.5) | debconf-2.0, libaudit1 (>= 1:2.2.1), libc6 (>= 2.26), libcom-err2 (>= 1.43.9), libcrypt1 (>= 1:4.1.0), libgssapi-krb5-2 (>= 1.17), libkrb5-3 (>= 1.13~alpha1+dfsg), libpam0g (>= 0.99.7.1), libselinux1 (>= 1.32), libssl1.1 (>= 1.1.1), libsystemd0, libwrap0 (>= 7.6-4~), zlib1g (>= 1:1.1.4) 推奨: default-logind | logind | libpam-systemd, ncurses-term, xauth, ssh-import-id 提案: molly-guard, monkeysphere, ssh-askpass, ufw 競合: sftp, ssh-socks, ssh2, openssh-server:i386 置換: openssh-client (< 1:7.9p1-8), openssh-client:i386 (< 1:7.9p1-8), ssh, ssh:i386, ssh-krb5 提供: openssh-server:i386 (= 1:8.2p1-4ubuntu0.1), ssh-server, ssh-server:i386 提供元: openssh-server:i386 (1:8.2p1-4), openssh-server:i386 (1:8.2p1-4ubuntu0.1) 説明: secure shell (SSH) server, for secure access from remote machines Secure Shell プロトコルのフリーな実装である OpenSSH の移植版です。 同プロトコルは IETF secsh ワーキンググループで仕様が策定されました。 Ssh (Secure Shell) は、リモートマシンにログインしたり、リモートマシン上で コマンドを実行するためのプログラムです。 安全でないネットワーク越しに、信頼できない 2 ホスト間の、安全で暗号化された 通信を提供します。X11 の接続や、任意の TCP/IP ポートについても、 安全な経路越しに転送することができます。 アプリケーションに安全な通信経路を提供するために使うことができます。 This package provides the sshd server. いくつかの国では、特別な許可なく暗号を使用することは、いかなる場合でも 違法とされる可能性があります。 sshd replaces the insecure rshd program, which is obsolete for most purposes. ホームページ: http://www.openssh.com/ $
ssh も実体としては openssh のようだが、パッケージとして見た場合にこの 2 つは依存関係が異なっているため、何かが違うことは違うようだ。
今回は ssh のほうをインストールすることにした。
apt-get install でさくっとインストールした
$ sudo apt-get install ssh パッケージリストを読み込んでいます… 完了 依存関係ツリーを作成しています 状態情報を読み取っています… 完了 以下の追加パッケージがインストールされます: openssh-client openssh-server openssh-sftp-server ssh-import-id 提案パッケージ: keychain libpam-ssh monkeysphere ssh-askpass molly-guard 以下のパッケージが新たにインストールされます: openssh-server openssh-sftp-server ssh ssh-import-id 以下のパッケージはアップグレードされます: openssh-client アップグレード: 1 個、新規インストール: 4 個、削除: 0 個、保留: 24 個。 1,116 kB のアーカイブを取得する必要があります。 この操作後に追加で 1,846 kB のディスク容量が消費されます。 続行しますか? [Y/n] y 取得:1 http://jp.archive.ubuntu.com/ubuntu focal-updates/main amd64 openssh-client amd64 1:8.2p1-4ubuntu0.1 [672 kB] 取得:2 http://jp.archive.ubuntu.com/ubuntu focal-updates/main amd64 openssh-sftp-server amd64 1:8.2p1-4ubuntu0.1 [51.5 kB] 取得:3 http://jp.archive.ubuntu.com/ubuntu focal-updates/main amd64 openssh-server amd64 1:8.2p1-4ubuntu0.1 [377 kB] 取得:4 http://jp.archive.ubuntu.com/ubuntu focal-updates/main amd64 ssh all 1:8.2p1-4ubuntu0.1 [5,080 B] 取得:5 http://jp.archive.ubuntu.com/ubuntu focal/main amd64 ssh-import-id all 5.10-0ubuntu1 [10.0 kB] 1,116 kB を 1秒 で取得しました (761 kB/s) パッケージを事前設定しています … (データベースを読み込んでいます … 現在 316278 個のファイルとディレクトリがインストールされています。) …/openssh-client_1%3a8.2p1-4ubuntu0.1_amd64.deb を展開する準備をしています … openssh-client (1:8.2p1-4ubuntu0.1) で (1:8.2p1-4 に) 上書き展開しています … 以前に未選択のパッケージ openssh-sftp-server を選択しています。 …/openssh-sftp-server_1%3a8.2p1-4ubuntu0.1_amd64.deb を展開する準備をしています … openssh-sftp-server (1:8.2p1-4ubuntu0.1) を展開しています… 以前に未選択のパッケージ openssh-server を選択しています。 …/openssh-server_1%3a8.2p1-4ubuntu0.1_amd64.deb を展開する準備をしています … openssh-server (1:8.2p1-4ubuntu0.1) を展開しています… 以前に未選択のパッケージ ssh を選択しています。 …/ssh_1%3a8.2p1-4ubuntu0.1_all.deb を展開する準備をしています … ssh (1:8.2p1-4ubuntu0.1) を展開しています… 以前に未選択のパッケージ ssh-import-id を選択しています。 …/ssh-import-id_5.10-0ubuntu1_all.deb を展開する準備をしています … ssh-import-id (5.10-0ubuntu1) を展開しています… openssh-client (1:8.2p1-4ubuntu0.1) を設定しています … ssh-import-id (5.10-0ubuntu1) を設定しています … Attempting to convert /etc/ssh/ssh_import_id openssh-sftp-server (1:8.2p1-4ubuntu0.1) を設定しています … openssh-server (1:8.2p1-4ubuntu0.1) を設定しています … Creating config file /etc/ssh/sshd_config with new version Creating SSH2 RSA key; this may take some time … 3072 SHA256:NHPiyUyApCdEukzH5XSeHzKg0NVplzJnJV5YWJuSFZM root@ProLiant-MicroServer (RSA) Creating SSH2 ECDSA key; this may take some time … 256 SHA256:sjd5EpqlM1x9OSsISxfwH4pegbIQ3Iqzayo1/1OvBVE root@ProLiant-MicroServer (ECDSA) Creating SSH2 ED25519 key; this may take some time … 256 SHA256:tdaL7bGhIZJoltORPBU0zL7BvUi64jI/XhccmHHvwYk root@ProLiant-MicroServer (ED25519) Created symlink /etc/systemd/system/sshd.service → /lib/systemd/system/ssh.service. Created symlink /etc/systemd/system/multi-user.target.wants/ssh.service → /lib/systemd/system/ssh.service. rescue-ssh.target is a disabled or a static unit, not starting it. ssh (1:8.2p1-4ubuntu0.1) を設定しています … systemd (245.4-4ubuntu3.1) のトリガを処理しています … man-db (2.9.1-1) のトリガを処理しています … ufw (0.36-6) のトリガを処理しています … $
さくっとインストールできた。
いろいろ確認してみる
$ ls -trl /etc/systemd/system | grep ssh lrwxrwxrwx 1 root root 31 6月 30 14:24 sshd.service -> /lib/systemd/system/ssh.service $ date 2020年 6月 30日 火曜日 14:27:03 JST $
ssh をインストールすると同時に systemd 関連のファイルも作られたようだ。このことから ssh サーバを systemd で制御すれば良いのだとわかる。
$ systemctl status sshd ● ssh.service - OpenBSD Secure Shell server Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-06-30 14:24:32 JST; 4min 51s ago Docs: man:sshd(8) man:sshd_config(5) Main PID: 396877 (sshd) Tasks: 1 (limit: 629145) Memory: 1.3M CGroup: /system.slice/ssh.service └─396877 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups 6月 30 14:24:32 ProLiant-MicroServer systemd[1]: Starting OpenBSD Secure Shell server… 6月 30 14:24:32 ProLiant-MicroServer sshd[396877]: Server listening on 0.0.0.0 port 22. 6月 30 14:24:32 ProLiant-MicroServer systemd[1]: Started OpenBSD Secure Shell server. 6月 30 14:24:32 ProLiant-MicroServer sshd[396877]: Server listening on :: port 22. $
active (running) となっていることからインストールが終わると同時に sshd が起動したとわかる。
$ ps -ef | grep sshd root 396877 1 0 14:24 ? 00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups nobi 398336 87247 0 14:30 pts/4 00:00:00 grep sshd $
sshd プロセスのタイムスタンプが 14:24 になっている。sshd をインストールしていたタイミングだ。
ということは、ssh クライアントとなる端末からパスワード認証を使ってすでに ssh ログインできる常態になっているのか?という疑問が湧いた。
MacBook Pro から ssh ログインを試みてみた。
$ ssh nobi@172.16.1.4 The authenticity of host '172.16.1.4 (172.16.1.4)' can't be established. ECDSA key fingerprint is SHA256:sjd5EpqlM1x9OSsISxfwH4pegbIQ3Iqzayo1/1OvBVE. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '172.16.1.4' (ECDSA) to the list of known hosts. nobi@172.16.1.4's password: Welcome to Linux Lite 5.0 (GNU/Linux 5.4.0-37-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage * "If you've been waiting for the perfect Kubernetes dev solution for macOS, the wait is over. Learn how to install Microk8s on macOS." https://www.techrepublic.com/article/how-to-install-microk8s-on-macos/ 29 updates can be installed immediately. 16 of these updates are security updates. To see these additional updates run: apt list --upgradable The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Welcome to Linux Lite 5.0 nobi 火曜日 30 6月 2020, 14:32:53 Memory Usage: 3184/7835MB (40.64%) Disk Usage: 15/228GB (7%) Support - https://www.linuxliteos.com/forums/ (Right click, Open Link) $
Welcome to Linux Lite と表示されていることから ssh ログインできたことがわかった。
以上で、ssh サーバとしての最低限の設定が完了した。このまま運用するという判断もありだと思います。
もう少しセキュアにしたい場合は、公開鍵認証の設定を追加で行います。
ssh の話になると公開鍵認証がセットかの如く出てくる疑問
ssh の設定と公開鍵認証がほぼセットで語られることに違和感を感じたことはないだろうか?特に企業で IT に携わっている人は ssh でサーバにログインできるようにしたい時、サーバエンジニアや担当者から「鍵作って」とか言われたことないでしょうか?
ssh ログインできるようにしたいだけなのに何で鍵の話が出てくるんだ?という疑問です。これをパスワード認証との関連で説明できる人 (説明してくれた人) を見たことがありません。少なくとも僕の場合は。
鍵というのはデータでありファイルのことですが、それを ssh クライアント (多くの場合パソコン) で作って、ssh サーバに保管します。そうすることでその ssh クライアントは 当該 ssh サーバに ssh ログインができるようになります。
つまり、パスワード認証だとパスワードを知っている人がどの端末 (パソコン) からでもログインできてしまえる状況になる危険性があるわけです。
だから、ssh の話が出た時に公開鍵認証がセットになることが多いわけです。パスワード認証よりも公開鍵認証の方がセキュアだからです。
公開鍵認証を有効にして、パスワード認証では ssh ログイン不可能にする
先日 Ubuntu の設定をした時に書いた記事 が参考になろうかと思います。僕もこの記事を参考に Linux Lite で設定していきます。
まず ssh サーバ側で .ssh ディレクトリを作成しておきます。
$ cd $ mkdir .ssh $ chmod 700 .ssh $ ls -ld .ssh drwx------ 2 nobi nobi 4096 6月 30 17:42 .ssh $
次に、これは Linux Lite 固有の問題 (他の Linux ディストリビューションには該当しない問題) と思われるが .bashrc を修正します。この修正をやらないと、後で行う公開鍵の受け渡しに scp が使えません。
$ pwd /home/nobi $ tail -7 .bashrc #echo -e "Welcome to $LLVER ${USER}" #echo " " #date "+%A %d %B %Y, %T" #free -m | awk 'NR==2{printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }' #df -h | awk '$NF=="/"{printf "Disk Usage: %d/%dGB (%s)\n", $3,$2,$5}' #echo "Support - https://www.linuxliteos.com/forums/ (Right click, Open Link)" #echo " " $
vi エディアなどで .bashrc の最後 7 行をコメントアウトしておきます。これをやらないと scp が失敗します。
ssh クライアントで鍵ペア (秘密鍵と公開鍵のセット) を作って ssh サーバに渡す
「鍵ペア = 秘密鍵と公開鍵のセット」のことです。秘密鍵も公開鍵もファイルです。秘密鍵は ssh クライアントが保持します。公開鍵は ssh サーバが保持します。2 つの鍵はペアとなっています。
ssh クライアントは何台あってもかまいませんが、我が家は MacBook Pro だけから ssh ログインできるようにしたいので MacBook Pro だけで鍵ペアを作ります。
$ pwd /Users/nobi/.ssh $ ssh-keygen -t rsa -b 4096 Generating public/private rsa key pair. Enter file in which to save the key (/Users/nobi/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /Users/nobi/.ssh/id_rsa. Your public key has been saved in /Users/nobi/.ssh/id_rsa.pub. The key fingerprint is: SHA256:ADMlex7rdZmZNjeMPtbnFQkqvICRzzISPOu2qyM9pUo nobi@nobis-mbp.lan The key's randomart image is: +---[RSA 4096]----+ | =.. | | . . | | +.o+ . | | +o=+. B. . . | | o +o+SoX.+ o | | . o.o..+o+ . . | | E = . .+ . . . | |o.= . . . o . | |ooo+. . | +----[SHA256]-----+ $ ls -l id_rsa -rw------- 1 nobi staff 3434 Jun 30 17:23 id_rsa -rw-r--r-- 1 nobi staff 744 Jun 30 17:23 id_rsa.pub $
Enter passphrase のところではパスワードに相当するパスフレーズの入力を求められます。今後 ssh ログインする際に毎回このパスフレーズの入力を求められます。僕は必ず記憶できる文字の並びをパスフレーズに設定するようにしています。
今回は Linux Lite にログインするようの鍵ペアを作りました。秘密鍵 (ファイル名が id_rsa) の方だけ名前をそれっぽく (linuxlite_rsa にした) 変更します。
$ mv id_rsa linuxlite_rsa $
ここまでできたら公開鍵 (ファイル名は id_rsa.pub) を ssh サーバ (Linux Lite) に scp で送ります。
$ scp ./id_rsa.pub 172.16.1.4:/home/nobi/.ssh nobi@172.16.1.4's password: id_rsa.pub 100% 744 7.6KB/s 00:00 $
また MacBook Pro が ssh 接続する時に参照する設定ファイル (ファイル名は config) を修正します。僕の場合は以下のようになりました。
$ cat config Host 172.16.1.2 HostName 172.16.1.2 User nobi IdentityFile ~/.ssh/ubuntu_rsa Host 172.16.1.3 HostName 172.16.1.3 User nobi IdentityFile ~/.ssh/raspi_rsa Host 172.16.1.4 HostName 172.16.1.4 User nobi IdentityFile ~/.ssh/linuxlite_rsa $
ファイルの一番下 4 行が Linux Lite に ssh 接続する時に参照されます。
ssh サーバで authorized_keys ファイルを作る
ssh クライアントから公開鍵が届いていることを確認します。
$ cd $ cd .ssh $ ls -l id_rsa.pub -rw-r--r-- 1 nobi nobi 744 6月 30 18:55 id_rsa.pub $
次に id_rsa.pub を cat して authorized_keys というファイルを作ります。
$ cat id_rsa.pub >> ./authorized_keys $ chmod 600 authorized_keys $ ls -l authorized_keys -rw------- 1 nobi nobi 744 6月 30 19:02 authorized_keys $
> ではなく >> を使っていることに注意してください。そして authorized_keys のパーミッションは 600 に変更しておきます。
id_rsa.pub を削除する。
$ rm id_rsa.pub $
この削除は全工程が終わってから削除しても良いです。その方が安心だったりしますが消し忘れるのが嫌なのでここで消しときました。
root ログインとパスワード認証を無効にする設定
root ユーザーが ssh でログインできなくする設定と、パスワード認証を無効にする設定を ssh サーバ側で行います。
/etc/ssh/sshd_config ファイルを vi で修正します。
$ cd /etc/ssh/ $ ls -l sshd_config -rw-r--r-- 1 root root 3289 5月 29 16:37 sshd_config $ sudo cp -p sshd_config sshd_config.org $ sudo vi sshd_config
diff で修正箇所を確認します。
$ diff sshd_config.org sshd_config 34c34 < #PermitRootLogin prohibit-password PermitRootLogin no 58,59c58,59 < #PasswordAuthentication yes < #PermitEmptyPasswords no PasswordAuthentication no PermitEmptyPasswords no $
sshd のプロセスを再起動します。
$ sudo systemctl restart ssh.service
ssh クライアントからログインしてみる
MacBook Pro からログインしてみる。
$ ssh 172.16.1.4 Enter passphrase for key '/Users/nobi/.ssh/linuxlite_rsa': Welcome to Linux Lite 5.0 (GNU/Linux 5.4.0-37-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage * "If you've been waiting for the perfect Kubernetes dev solution for macOS, the wait is over. Learn how to install Microk8s on macOS." https://www.techrepublic.com/article/how-to-install-microk8s-on-macos/ 29 updates can be installed immediately. 16 of these updates are security updates. To see these additional updates run: apt list --upgradable Last login: Tue Jun 30 18:30:51 2020 from 10.1.0.2 $
同様にして我が家にある chromebook から ssh 172.16.1.4 と叩いてみても公開鍵認証で弾かれログインできないことを確認した。