URL: https://www.progressiverobot.com/how-to-use-ssh-to-connect-to-a-remote-server-ja/

はじめに

SSHは、システム管理者としてマスター必須のツールの一つです。

SSH(*Secure Shell*の略)は、リモートシステムへの安全なログインに使用されるプロトコルです。 リモートLinuxサーバーにアクセスする最も一般的な方法です。

このガイドでは、SSHを使用してリモートシステムに接続する方法を説明します。

基本的な構文

ssh illustration for: 基本的な構文

SSHを使用してリモートシステムに接続するには、sshコマンドを使用します。コマンドの最も基本的な形式は次のとおりです。

				
					
ssh <^>remote_host<^>

				
			

この例の<^>remote_host<^>は、接続しようとしているIPアドレスやドメイン名です。

このコマンドは、リモートシステム上のユーザー名がローカルシステムのユーザー名と同じであると想定します。

リモートシステムのユーザー名と異なる場合、この構文を使用して指定できます。

				
					
ssh &lt;^&gt;remote_username&lt;^&gt;@&lt;^&gt;remote_host&lt;^&gt;

				
			

サーバーに接続すると、パスワードを提供して身元の確認を求められることがあります。後半で、パスワードの代わりに鍵を生成して使用する方法を説明します。

sshセッションを終了してローカルシェルセッションに戻るには、次のように入力します。

				
					
exit

				
			

SSHの機能

SSHは、クライアントプログラムをsshdと呼ばれるsshサーバーに接続することにより動作します。

前のセクションでは、sshはクライアントプログラムでした。*sshサーバー*は、指定したremote_hostで既にに稼働しています。

サーバーでは、sshdサーバーが既に稼働しているはずです。そうでない場合は、Webベースのコンソールかローカルシリアルコンソールからサーバーにアクセスする必要があります。

sshサーバーの開始に必要なプロセスは、使用するLinuxディストリビューションによって異なります。

Ubuntuでは、次のように入力してsshサーバーを起動します。

				
					
sudo systemctl start ssh

				
			

sshdサーバーが起動し、リモートログインできます。

SSHの設定方法

SSHの設定変更は、すなわちsshdサーバーの設定変更を意味します。

Ubuntuでは、メインのsshd設定ファイルは/etc/ssh/sshd_configにあります。

ファイルを編集する前に現在のバージョンをバックアップします。

				
					
sudo cp /etc/ssh/sshd_config{,.bak}

				
			

テキストエディターで開きます。

				
					
sudo nano /etc/ssh/sshd_config

				
			

このファイルのオプションの大半をそのまま残します。ただし、見ておきたいオプションも次のように数点あります。

				
					
[label /etc/ssh/sshd_config]

Port 22

				
			

ポート宣言では、sshdサーバーの接続待ち受けポートを指定します。  デフォルトのポートは22です。 この設定は特に理由がある場合を除いて変更しない方がよいでしょう。ポートを変更*する*場合は、後半で新しいポートに接続する方法を説明します。

				
					
[label /etc/ssh/sshd_config]

HostKey /etc/ssh/ssh_host_rsa_key

HostKey /etc/ssh/ssh_host_dsa_key

HostKey /etc/ssh/ssh_host_ecdsa_key

				
			

ホスト鍵宣言で、グローバルホスト鍵を探す場所を指定します。ホスト鍵については後ほど説明します。

				
					
[label /etc/ssh/sshd_config]

SyslogFacility AUTH

LogLevel INFO

				
			

これらの2項目は、ログインレベルを示します。

SSHに問題がある場合、ログイン数を増やせば問題の発見に役立ちます。

				
					
[label /etc/ssh/sshd_config]

LoginGraceTime 120

PermitRootLogin yes

StrictModes yes

				
			

これらのパラメータは、ログイン情報のいくつかを指定します。

LoginGraceTimeは、ログインまでの制限時間を設定します。

この時間は、通常のログインにかかる時間よりも若干長めに設定するのがよいでしょう。

PermitRootLoginは、rootユーザーのログインを許可するかどうかを選択します。

通常、susudoを介して高度な権限にアクセスできるユーザーアカウントを作成し、sshログインできる場合は、noに変更します。

strictModesは、認証ファイルが誰でも開ける状態になると、ログインを拒否するセーフティーガードです。

これにより、設定ファイルが安全でないときのログインが防げます。

				
					
[label /etc/ssh/sshd_config]

X11Forwarding yes

X11DisplayOffset 10

				
			

これらのパラメータは、*X11転送*という機能を設定します。これは、リモートシステムのグラフィカルユーザーインターフェイス(GUI)をローカルシステムに表示する機能です。

このオプションは、サーバー上で有効になり、-Xオプションに接続するSSHクライアントに与えられるものです。

変更後、CTRL + XYENTERキーを押してファイルを保存して閉じます。

/etc/ssh/sshd_configの設定を変更したら、必ずsshdサーバーをリロードして変更を実装させます。

				
					
sudo systemctl reload ssh

				
			

変更を徹底的にテストして、期待通りに動作するか確認します。

変更を完了する際、セッションをいくつかアクティブにするのがよいでしょう。これにより、必要に応じて設定が取り消せます。

鍵を使用してSSHにログインする方法

パスワードでリモートシステムにログインするのも便利ですが、_鍵認証_をセットアップするとはるかに便利です。

鍵認証の機能の仕組み

鍵認証は_、秘密鍵_と_公開鍵_の鍵ペアの作成により機能します。

_秘密鍵_は、クライアントマシンにあり、安全に隠されます。

_公開鍵_は、誰にでも公開可能で、アクセスしたいサーバーに配置されます。

鍵ペアを使用して接続を試みると、サーバーは公開鍵を使用して秘密鍵がないと読めないクライアントコンピュータに宛てたメッセージを作成します。

クライアントコンピューターは、適切なレスポンスをサーバーに送信し、サーバーはクライアントが正当であると識別します。

このプロセス全体は、鍵をセットアップすると自動的に実行されます。

SSH鍵を作成する方法

SSH鍵は、ログイン*元*のコンピューターで生成されます。これは通常、ローカルマシンです。

コマンドラインに次を入力します。

				
					
ssh-keygen -t rsa

				
			

enterキーを押してデフォルトを承認します。鍵は、*~/.ssh/id_rsa.pub*と*~/.ssh/id_rsa*で作成されます。

次のように入力して、.sshディレクトリに移動します。

				
					
cd ~/.ssh

				
			

ファイルの権限を確認します。

				
					
ls -l

				
			
				
					
[secondary_label Output]

-rw-r--r-- 1 demo demo 807 Sep 9 22:15 authorized_keys

-rw------- 1 demo demo 1679 Sep 9 23:13 id_rsa

-rw-r--r-- 1 demo demo 396 Sep 9 23:13 id_rsa.pub

				
			

ご覧のとおり、id_rsaファイルは、所有者のみが読み取り・書き込み可能です。このような仕組みで秘密が保持されます。

ただし、id_rsa.pubファイルは、共有可能で、このアクティビティに相応しい権限を持ちます。

公開鍵をサーバーに転送する方法

現在パスワード認証によるサーバーへのアクセス権があれば、このコマンドを発行すれば公開鍵をサーバーにコピーできます。

				
					
ssh-copy-id &lt;^&gt;remote_host&lt;^&gt;

				
			

これにより、SSHセッションが開始します。パスワードを入力すると、公開鍵がサーバーの認証鍵ファイルにコピーされます。これにより、次回のログイン時からパスワードが不要になります。

クライアント側のオプション

SSH接続する際に選択できるオプションフラグがいくつかあります。

そのうちのいくつかは、リモートホストのsshd設定と合わせる必要があります。

たとえば、sshd設定でポート番号を変更した場合は、次のように入力してクライアント側のポートを合わせます。

				
					
ssh -p &lt;^&gt;port_number&lt;^&gt; &lt;^&gt;remote_host&lt;^&gt;

				
			

リモートシステムで実行するコマンドが1つだけの場合は、ホストの後にそのように指定できます。

				
					
ssh &lt;^&gt;remote_host&lt;^&gt; &lt;^&gt;command_to_run&lt;^&gt;

				
			

リモートマシンに接続し、認証が行われ、コマンドが実行されます。

前述のように、双方のコンピューターでX11転送が有効になっている場合、その機能にアクセスするには次のように入力します。

				
					
ssh -X &lt;^&gt;remote_host&lt;^&gt;

				
			

コンピューターに適切なツールが入っていれば、リモートシステムで使用中のGUIプログラムのウィンドウがローカルシステムで開きます。

パスワード認証を無効にする

SSHの鍵を作成すると、パスワードのみの認証を無効にしてサーバーのセキュリティを強化できます。 コンソールを別にすれば、サーバーにログインする唯一の方法は、サーバーにインストールした公開鍵とペアをなす秘密鍵を使用することです。

[warning]

警告:このステップに進む前に、サーバーに公開鍵をインストールしておくようにしてください。そうでないとロックアウトされてしまいます。

rootまたはsudo権限を持つユーザーとして、sshd設定ファイルを開きます。

				
					
sudo nano /etc/ssh/sshd_config

				
			

Password Authenticationと書いてある行を検索し、行頭の #を削除してコメントを解除します。次に、その値をnoに変更します。

				
					
[label /etc/ssh/sshd_config]

PasswordAuthentication no

				
			

さらに2つの設定、PubkeyAuthenticationChallengeResponseAuthenticationも、(このファイルの設定を変更したことがなければ)変更する必要がありません。これらはデフォルトで設定されていますが、以下のように表示されます。

				
					
[label /etc/ssh/sshd_config]

PubkeyAuthentication yes

ChallengeResponseAuthentication no

				
			

変更後、ファイルを保存して閉じます。

SSHデーモンをリロードします。

				
					
sudo systemctl reload ssh

				
			

パスワード認証が無効になり、サーバーはSSH鍵認証でしかログインできなくなっています。

まとめ

SSHは、それが一般的なアクティビティだから、という理由だけでも知っておく価値があります。

さまざまなオプションを使用していくうちに、より高度な機能の発見もあり、作業がもっと楽になります。SSHは、あらゆる状況において安全、軽量かつ便利であるため、高い人気を維持しています。