LinuxのOpenSSHでセキュアな接続とファイル転送を学ぼう!

eyecatch-linux-open-ssh
目次

OpenSSHとは?

SSHとは?

SSH(Secure Shell)はネットワークを介して安全にリモート接続し、操作を行うためのプロトコルおよび関連するプログラムのことです。SSHは暗号化を利用して通信内容を保護し、不正なアクセスや盗聴から守ります。主にUnix系オペレーティングシステムで使用されますが、Windowsや他のプラットフォームでも利用できます。

よくSSHはtelnetと比較されることがあります。telnetもリモートログインを確立するためのプロトコルなのですが、暗号化されずに平文で通信されるので通常は使いません。使うことがあるとすれば接続確認くらいでしょうか。私自身も知識として知っているだけで、現場でtelnetを利用したことはおそらく一度もないような気がします。

SSHはリモートシェルアクセスでの利用が多いと思いますが、他にもscpを用いたファイル転送、トンネリング機能を利用して特定のポートへの通信を確立するポートフォワーディング、公開鍵認証などの機能を提供します。

OpenSSHとは?

OpenSSHOpenBSD Secure Shell)は、SSHプロトコルを実装したオープンソースのツールキットで、リモートアクセスやファイル転送などのネットワーク通信を安全に行うためのソフトウェアパッケージです。通常SSHといった場合、OpenSSHを指すことが大半ではないかと思います。

OpenSSHにはクライアントとサーバーがあります。クライアントは操作中のOSから別のOSにSSH接続するためのツールで、サーバーは別のOSからSSH接続を受けるためのツールです。この記事ではsshサーバーを解説してきます。

普段Linuxで利用しているエンジニアの方であればSSHはとても身近なものではないでしょうか?私自身もローカルで開発した後にサーバーにファイルを転送したり、リモートログインをしてサーバーの設定や構築をするときに頻繁に利用しています!インフラエンジニアでなくても利用することが多いので、この記事で学習していきましょう。

この記事ではこのOpenSSHを利用したリモートログインや機能の解説をしていきます!

OpenSSHの環境構築とリモートログイン

前提と準備

接続元:windows11とTera Term
接続先:ubuntu 20.04.3 LTS

Tera Termによるリモートログイン

SSHサーバーの設定をする前に捜査しているLinuxにOpenSSH serverがインストール済みかを確認します。もし下の3行目のようにUnit sshd.service could not be found.が表示されたらsudo apt install openssh-serverでopenssh-serverをインストールしましょう。途中でディスク容量を消費しますが続行しますか?というような表示が出るかもしれませんが、表示された場合はYで処理を継続してください。

sudo service sshd status
[sudo] password for tester:
Unit sshd.service could not be found.

sudo apt install openssh-server

下のコマンド表示のように2行目以降からssh.service – OpenBSD Secure Shell server…が表示されればOKです。ちなみにsshdはOpenSSHサーバー、sshはOpenSSHクライアントを意味します。

sudo service sshd status
ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2024-05-26 09:45:55 JST; 6h ago
       Docs: man:sshd(8)
             man:sshd_config(5)
   Main PID: 892 (sshd)
      Tasks: 1 (limit: 2279)
     Memory: 5.9M
     CGroup: /system.slice/ssh.service
             mq892 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups

May 26 15:56:45 hostname sshd[35003]: Connection closed by *.*.*.* port 36210 [preauth]

Tera TermからSSH接続

ここまでくればあとはwindowsのクライアントツールからSSH接続を試みます。今回はSSHツールとして有名なTera Termを使用します。こちらからzipファイルをダウンロードしてインストールしてください。

接続するためのIPアドレスは下記のコマンドで確認します(表示内容はこちらを参考)。ここで確認すべきが8行目以下のens3と書かれているネットワークデバイスです。ens3の名称は環境によって変わる可能性がありますが、2行目にあるlo以外に表示されているデバイスのIPを参照ください。ここでは192.168.113.50が利用すべきIPアドレスになります。

ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:91:98:fd brd ff:ff:ff:ff:ff:ff
    inet 192.168.113.50/24 brd 192.168.113.255 scope global noprefixroute ens3
       valid_lft forever preferred_lft forever

最後にTera TermにてSSH接続を確認します。下図を参考にTera TermにIP(ここでは192.168.113.50)、ポート番号(ここでは22)、ユーザー名とパスワードを入力後、OKボタンをクリックします。すると無事SSHでログインができることがわかります。

teraterm1

Last login: Sun May 26 18:21:17 2024 from 182.158.72.111
user@hostname:~$

ポート変更と公開鍵認証によるリモートログイン

ポート22番の危険性と対策

SSHは22番ポートを利用してリモートログインを行いますが、この22番ポートはウェルノウンポート(よく使われるポート番号)の1つであり、セキュリティ的に狙われやすいポートの1つでもあります。特にSSHはリモート操作ができるため攻撃者からすると魅力的な機能です。そこで不正アクセスを防止するためポート番号変更と公開鍵認証の導入を行い、セキュリティを強化することが一般的です。

例えばレンタルサーバ大手のエックスサーバーでは、レンタルサーバのSSHポートはデフォルトで10022に設定されているため、よりセキュリティを意識していると言えるでしょう。(詳しくはこちらを参照)

ポート変更

それではSSH接続のポートを変更してきましょう。今回は22から10022に変更してみたいと思います。sshd_configを編集してPortを10022に指定します。/etc/sshにはsshd_confgとssd_configがありますが、ssd_configはsshクライアントの設定ファイルになります。編集するファイルを間違えないように注意ください。

cd /etc/ssh
vi sshd_config
sshd.config
#Port 22
Port 10022

編集後、systemctl restart sshd.serviceでサービスを再起動し、ss -atnコマンドでポートの状態を確認します。下の4行目のLocal Address:Portに10022が表示されていればOKです。

systemctl restart sshd.service
ss ‒atn
State        Recv-Q       Send-Q             Local Address:Port                 Peer Address:Port        Process
LISTEN       0            128                0.0.0.0:10022                      0.0.0.0:*

最後にTera Termで接続を確認します。前述と同じようにホストにIPアドレス、ポートにポート番号(今回は10022)を入力してOKをクリックします。その後ユーザー名とパスワードを入力してOKをクリックすれば先ほどと同じようにログインができるはずです。

teraterm3

SCPを利用したファイル転送

SCPとFTP

ファイル転送というとFTPが一般的かなと思います。ファイル転送のクライアントツールとしては、windows環境ならFFFTPやWinSCPあたりが、Linux環境ではFilezillaあたりが有名どころかなと思います。実はSSH接続ができるとSCPプロトコルにてファイル転送ができます。

この2つのプロトコルの使い分けですが、SCPはセキュリティが重要であり、コマンドラインを使用して効率的にファイルを転送したい場合に、一方FTPは非機密データの転送や、GUIツールを使用して簡単にファイルを管理・転送したい場合に用いるとよいでしょう。なおFTPの機密性を高めるにはSFTPやFTPSを用いることが一般的です。。

Tera Termによるファイル転送

Tera Termによるファイル転送はとても簡単です。Tera Termコンソールにアップロードしたいファイルをドラッグ&ドロップをし、送信先(下図の場合はホームディレクトリ)を指定してOKを押すだけです。

teraterm4

Tera Termコンソールに戻りホームディレクトリに移動後にlsコマンドをたたいてみると、アップロードしたファイルが存在していることがわかります。これでFTPサーバーを構築しなくても簡単にファイル転送ができますね!

test@hostname:~$ cd ~
test@hostname:~$ ls
test.png

まとめ

今回の記事ではOpenSSHを利用したSSHサーバーの設定を解説しました。普段から気軽に使っている方も多い機能だけに本記事で紹介した内容を踏まえておくことで安全で便利にSSHを使うことができると思います。特に最後に紹介したSCPによるファイル転送はFTPを導入せずに気軽に利用できるファイル転送機能なので、ぜひ使ってみてくださいね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Hack Luck Labの管理人hakula(ハクラ)です。2012年にSIerに新卒入社し、SE、新規事業、情シスを担当。その後、ITコンサルを経て、現在はバックエンドエンジニア。過去にはC#、SQL Server、JavaScriptで開発を行い、現在はPython、Rest Framework、Postgresql、Linux、AWSなどを使用しています。ノーコードツールやDX関連も興味あり。「技術は価値を生むために使う」ことが信条で、顧客や組織への貢献を重視しています。

目次