SSH接続とは?|SSH接続の仕方、パスワード認証と公開鍵認証について解説

SSH接続とは?|SSH接続の仕方、パスワード認証と公開鍵認証について解説のアイキャッチイメージ

SSH接続


SSHとは、Secure SHellの略でネットワークを介して別のコンピュータにログインして操作するためのソフトウェア、またはプロトコルを言います。以前はtelnetが使われていましたがセキュリティに問題があるため、SSHが使われるようになりました。

SSH接続すると何故安全なのかと言いますと、ネットワーク中でやり取りするデータが暗号化されるため簡単には解読できなくなるからです。telnet接続ではデータが暗号化されていないため、比較的簡単に盗み見ることができてしまいます。

以下に出てくるコマンドやプログラムは、Windows10またはLinux(Ubuntu20.10)で動作確認されたものです。なお、以下の解説ではWindows10をクライアント、Ubuntuをサーバとして解説しています。

SSH接続の設定例

ここでは、Ubuntu20.10をSSHのサーバとして使用するための実例を紹介します。

SSH接続時の認証方式には、パスワード認証と公開鍵認証の2種類あります。

個人のLAN内だけで使用するのであればパスワード認証で十分ですが、大勢の人が共有するLANや、別の場所にあるサーバにログインするような場合には「公開鍵認証」を用いるべきでしょう。

UbuntuにSSHをインストールする

Ubuntuにsshdがインストールされていないときは、下記のコマンドを実行してインストールしてください。公開鍵認証を利用されない場合(パスワード認証で良い場合)は、sshdをインストールするだけでSSH接続できるようになります。

公開鍵認証に使用する鍵のペアを作成する(公開鍵を使う場合)

下記のコマンドを実行して鍵を作成してください。Windows10で作成する場合には①を、Ubuntuで作成する場合には②のコマンドを実行してください。鍵を作る際は安全性を向上させるため、passphraseを入力するようにしましょう。

Ubuntuのssh-keygenはデフォルトで新しい書式の鍵を出力するのですが、後ほど紹介するサンプルプログラムで使用しているライブラリが新しい書式に対応していないため、古い書式で出力するようにオプションを付けています。

他のターミナルソフト(TeraTermなど)であれば、Ubuntuで作成した新しい書式の鍵でも使用できます。

下記コマンドを実行すると、id_rsaとid_rsa.pubというファイルが作成されます。id_rdaが秘密鍵でid_rsa.pubが公開鍵になります。id_rsaをクライアント(端末)側に、id_rsa.pubの方をサーバ側に設定します。

公開鍵ファイルをauthorized_keysファイルに追記する(公開鍵を使う場合)

SSH接続でログインしたいユーザでログインして、作成した公開鍵(id_rsa.pub)を ~/.ssh にコピー後、以下のコマンドを実行してauthorized_keysファイルに追記してください。authorized_keysファイルが無い場合にはコピーでも問題ありません。

sshdの設定ファイル(sshd_config)を変更する(公開鍵を使う場合)

ファイル /etc/ssh/sshd_config をエディタで開いて、下記のようにそれぞれ変更してください。

sshdをリスタート(公開鍵を使う場合)

下記のコマンドを実行してsshdをリスタートすれば、SSH接続の公開鍵認証でログインできるようになります。ただし、パスワード認証ではログインできなくなります。

SSHクライアントを作る


サーバによってはターミナルソフトを使ってSSH接続すれば、コマンドシェルよりコマンドを実行することができます。更に自作プログラム(SSHクライアント)からコマンドを実行できるようになれば、更に自動化できて便利になります。

そこでここでは、Windows10とVisualStudioのC#、SSH接続ライブラリのSSH.NETを用いた簡易ターミナルプログラム(sshTerm)を紹介します。

この簡易ターミナルプログラムはエスケープシーケンスの処理やエラー処理(例外処理)などを端折っていますので実用的ではありませんが、SSH接続してコマンドを実行できますので参考にしてみてください。

SSH接続サンプルプログラム(sshTerm)

下記のプログラムはWindows10、VisualStudio2017のC#、SSH.NET、.NET Framework4.5を利用して作成されています。ホスト名やユーザ名、パスワードなど、ログインに必要な設定が正しくできれば簡易ターミナルソフトとして機能します。

SSH.NETは、VisualStudioのNuGetパッケージマネージャを利用してダウンロード(インストール)してください。

最後に


C#とSSH.NETライブラリを用いた認証の仕方とコマンド入力、結果の取得方法など、参考にしてみてください。

また、サーバによってはターミナルソフトを使ってSSH接続するとコマンドシェルを使えるようになります。

コマンドシェル(SSHサーバ)は基本的に人が手作業で入力することを想定して作られていますので、立て続けにコマンドを送りつけると正しく動作しないことがあります。適当にウェイトを入れるように工夫しましょう。

インフラエンジニア専門の転職サイト「FEnetインフラ」

FEnetインフラはサービス開始から10年以上『エンジニアの生涯価値の向上』をミッションに掲げ、多くのエンジニアの就業を支援してきました。

転職をお考えの方は気軽にご登録・ご相談ください。