[Linux] sshコマンドの使い方 – サーバーへのリモート接続

sshコマンドは、Linuxや他のUnix系システムでサーバーにリモート接続するためのツールです。

基本的な使い方は、ssh ユーザー名@ホスト名です。

例えば、ssh user@example.comと入力すると、example.comというホストにuserとして接続します。

デフォルトではポート22を使用しますが、-pオプションでポート番号を指定できます。

例えば、ssh -p 2222 user@example.comのようにします。

この記事でわかること
  • SSHコマンドの基本的な使い方
  • 公開鍵認証の設定手順
  • SSH接続のトラブルシューティング方法
  • SSHのセキュリティ強化策
  • SSHの応用的な利用方法

目次から探す

sshコマンドとは

ssh(Secure Shell)コマンドは、ネットワークを介してリモートのコンピュータに安全に接続するためのプロトコルです。

主にLinuxやUnix系のシステムで使用され、データの暗号化を行うことで、通信の安全性を確保します。

sshを使用することで、リモートサーバーにログインしたり、コマンドを実行したり、ファイルを転送したりすることが可能です。

従来のtelnetやrloginと異なり、sshはセキュリティが強化されており、パスワードやデータが盗聴されるリスクを大幅に低減します。

sshは、システム管理や開発作業において非常に重要なツールとなっています。

sshコマンドの基本的な使い方

ユーザー名とホスト名を指定して接続する

sshコマンドを使用してリモートサーバーに接続する際は、ユーザー名とホスト名を指定します。

基本的な構文は以下の通りです。

ssh ユーザー名@ホスト名

例:ssh user@example.com

このコマンドを実行すると、指定したホストに接続が試みられます。

デフォルトポートでの接続

sshコマンドは、デフォルトでポート22を使用して接続します。

特にポートを指定しない場合、sshは自動的にこのポートを使用します。

例:ssh user@example.com

この場合、ポート22で接続されます。

パスワード認証による接続

接続時にパスワード認証を使用する場合、ユーザー名とホスト名を指定した後、パスワードの入力を求められます。

正しいパスワードを入力すると、リモートサーバーにログインできます。

ssh user@example.com
# パスワードを入力

公開鍵認証による接続

公開鍵認証を使用する場合、事前に公開鍵をリモートサーバーに登録しておく必要があります。

接続時にはパスワードの入力が不要で、秘密鍵を使用して認証が行われます。

ssh -i /path/to/private_key user@example.com

接続先のホストキー確認

初めて接続するホストに対しては、ホストキーの確認が行われます。

接続時に表示されるホストキーのフィンガープリントを確認し、正しいホストであることを確認します。

正しい場合は yes と入力して接続を続行します。

The authenticity of host 'example.com (192.0.2.1)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)?

sshコマンドのオプション

ポート番号を指定する -p

sshコマンドでは、接続するポート番号を指定することができます。

デフォルトではポート22が使用されますが、異なるポートを使用する場合は-pオプションを使います。

ssh -p 2222 user@example.com

このコマンドは、ポート2222を使用して接続します。

接続タイムアウトを設定する -o ConnectTimeout

接続がタイムアウトするまでの時間を指定するには、-o ConnectTimeoutオプションを使用します。

このオプションを使うことで、接続試行が長時間続くのを防ぐことができます。

ssh -o ConnectTimeout=10 user@example.com

この場合、接続が10秒以内に確立されないと、タイムアウトエラーが発生します。

特定のSSH設定ファイルを使用する -F

特定のSSH設定ファイルを指定して接続するには、-Fオプションを使用します。

これにより、通常の設定ファイルとは異なる設定を使用することができます。

ssh -F /path/to/config user@example.com

このコマンドは、指定した設定ファイルを使用して接続します。

接続時の詳細なログを表示する -v

接続時に詳細なデバッグ情報を表示するには、-vオプションを使用します。

このオプションを追加することで、接続の過程で発生する情報を確認できます。

ssh -v user@example.com

このコマンドは、接続時の詳細なログを表示します。

X11フォワーディングを有効にする -X

リモートサーバーで実行されるGUIアプリケーションをローカルで表示するためには、-Xオプションを使用してX11フォワーディングを有効にします。

ssh -X user@example.com

このコマンドを実行すると、リモートサーバー上のGUIアプリケーションがローカルに表示されます。

エージェントフォワーディングを有効にする -A

エージェントフォワーディングを有効にするには、-Aオプションを使用します。

これにより、リモートサーバーからさらに別のサーバーに接続する際に、ローカルのSSHエージェントを利用できます。

ssh -A user@example.com

このコマンドを実行すると、リモートサーバー上でローカルのSSHキーを使用して他のサーバーに接続できます。

公開鍵認証の設定方法

公開鍵と秘密鍵の生成

公開鍵認証を使用するためには、まず公開鍵と秘密鍵のペアを生成する必要があります。

以下のコマンドを実行すると、~/.sshディレクトリに鍵ペアが作成されます。

ssh-keygen -t rsa -b 4096

このコマンドを実行すると、鍵の保存先やパスフレーズの入力を求められます。

デフォルトのままEnterを押すと、id_rsa(秘密鍵)とid_rsa.pub(公開鍵)が生成されます。

公開鍵をサーバーにコピーする

生成した公開鍵をリモートサーバーにコピーするには、ssh-copy-idコマンドを使用します。

以下のコマンドを実行します。

ssh-copy-id user@example.com

このコマンドを実行すると、指定したユーザーのパスワードを入力するよう求められ、公開鍵が自動的にサーバーの~/.ssh/authorized_keysファイルに追加されます。

~/.ssh/authorized_keysファイルの設定

公開鍵がサーバーにコピーされた後、~/.ssh/authorized_keysファイルに正しく追加されていることを確認します。

このファイルには、許可された公開鍵が1行ずつ記載されています。

cat ~/.ssh/authorized_keys
# ssh-rsa AAAAB3... user@local

パーミッションの確認と設定

セキュリティを確保するために、~/.sshディレクトリとその中のファイルのパーミッションを適切に設定する必要があります。

以下のコマンドでパーミッションを確認し、設定します。

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

これにより、~/.sshディレクトリは所有者のみがアクセスでき、authorized_keysファイルも同様に保護されます。

パスフレーズの設定と管理

秘密鍵を生成する際にパスフレーズを設定することが推奨されます。

これにより、秘密鍵が盗まれた場合でも、パスフレーズがなければ使用できません。

パスフレーズは、強力で推測されにくいものを選ぶことが重要です。

秘密鍵のパスフレーズを変更するには、以下のコマンドを使用します。

ssh-keygen -p -f ~/.ssh/id_rsa

このコマンドを実行すると、現在のパスフレーズと新しいパスフレーズの入力を求められます。

SSH接続のトラブルシューティング

接続できない場合の確認事項

SSH接続ができない場合、以下の確認事項をチェックします。

スクロールできます
確認項目説明
ホスト名やIPアドレスの確認接続先のホスト名やIPアドレスが正しいか確認します。
ポートの開放状況の確認使用しているポート(デフォルトは22)が開放されているか確認します。
ファイアウォールの設定確認サーバーやローカルのファイアウォール設定がSSH接続をブロックしていないか確認します。

ホスト名やIPアドレスの確認

接続先のホスト名やIPアドレスが正しいかを確認します。

誤った情報を入力すると接続できません。

pingコマンドを使ってホストに到達できるか確認することも有効です。

ping example.com

ポートの開放状況の確認

SSH接続に使用するポートが開放されているか確認します。

telnetコマンドを使用して、指定したポートに接続できるか試みます。

telnet example.com 22

ファイアウォールの設定確認

サーバーやローカルのファイアウォール設定がSSH接続をブロックしていないか確認します。

必要に応じて、ファイアウォールの設定を見直し、SSH接続を許可します。

ホストキーの変更による警告の対処法

接続時に「ホストの認証情報が変更されました」という警告が表示される場合、ホストキーが変更された可能性があります。

この場合、~/.ssh/known_hostsファイルから該当するホストのエントリを削除する必要があります。

ssh-keygen -R example.com

その後、再度接続を試みると、新しいホストキーが登録されます。

公開鍵認証が失敗する場合の対処法

公開鍵認証が失敗する場合、以下の点を確認します。

  • 公開鍵がサーバーの~/.ssh/authorized_keysに正しく追加されているか
  • 秘密鍵のパーミッションが適切に設定されているかchmod 600 ~/.ssh/id_rsa
  • SSHエージェントに秘密鍵が追加されているか(ssh-addコマンドを使用)

タイムアウトが発生する場合の対処法

接続時にタイムアウトが発生する場合、以下の点を確認します。

  • ネットワーク接続が正常であるか
  • サーバーが稼働しているか
  • サーバーのSSHサービスが起動しているか(systemctl status sshdで確認)

これらの確認を行い、問題を特定して対処します。

SSHの応用的な使い方

SSHトンネリングの利用

SSHトンネリングを利用することで、セキュアな通信を確保しながら、特定のポートを通じてデータを転送することができます。

以下の3つの方法があります。

ローカルポートフォワーディング

ローカルポートフォワーディングを使用すると、ローカルマシンのポートをリモートサーバーのポートに転送できます。

以下のコマンドで設定します。

ssh -L ローカルポート:リモートホスト:リモートポート user@example.com
ssh -L 8080:localhost:80 user@example.com

このコマンドは、ローカルの8080ポートへのアクセスをリモートサーバーの80ポートに転送します。

リモートポートフォワーディング

リモートポートフォワーディングを使用すると、リモートサーバーのポートをローカルマシンのポートに転送できます。

以下のコマンドで設定します。

ssh -R リモートポート:ローカルホスト:ローカルポート user@example.com
ssh -R 9090:localhost:3000 user@example.com

このコマンドは、リモートサーバーの9090ポートへのアクセスをローカルの3000ポートに転送します。

ダイナミックポートフォワーディング

ダイナミックポートフォワーディングを使用すると、SSHをプロキシとして利用できます。

以下のコマンドで設定します。

ssh -D ローカルポート user@example.com
ssh -D 1080 user@example.com

このコマンドは、ローカルの1080ポートをプロキシとして使用し、SSH経由でインターネットにアクセスできます。

SCPコマンドでファイルを転送する

SCP(Secure Copy Protocol)を使用すると、SSHを介してファイルを安全に転送できます。

以下のコマンドでファイルをコピーします。

scp /path/to/local_file user@example.com:/path/to/remote_directory
scp myfile.txt user@example.com:/home/user/

このコマンドは、myfile.txtをリモートサーバーの指定したディレクトリにコピーします。

rsyncコマンドで効率的にファイルを同期する

rsyncコマンドを使用すると、SSHを介してファイルやディレクトリを効率的に同期できます。

以下のコマンドで使用します。

rsync -avz -e ssh /path/to/local_directory/ user@example.com:/path/to/remote_directory/
rsync -avz -e ssh /local/dir/ user@example.com:/remote/dir/

このコマンドは、ローカルのディレクトリをリモートサーバーに同期します。

-aオプションはアーカイブモード、-vは詳細表示、-zは圧縮を意味します。

SSHを使ったリモートコマンド実行

SSHを使用してリモートサーバー上でコマンドを直接実行することも可能です。

以下のコマンドで実行します。

ssh user@example.com 'コマンド'
ssh user@example.com 'ls -l /home/user/'

このコマンドは、リモートサーバーの指定したディレクトリの内容をリスト表示します。

SSHを使ったGitリポジトリへのアクセス

SSHを使用してGitリポジトリにアクセスすることができます。

リモートリポジトリのURLをSSH形式で指定します。

git clone git@example.com:user/repo.git

このコマンドは、SSHを介してリモートリポジトリをクローンします。

SSHキーが設定されている場合、パスワードなしでアクセスできます。

SSHのセキュリティ強化

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

SSHのセキュリティを強化するために、パスワード認証を無効にし、公開鍵認証のみを使用することが推奨されます。

これにより、ブルートフォース攻撃のリスクを減少させることができます。

設定は、/etc/ssh/sshd_configファイルを編集し、以下の行を変更します。

PasswordAuthentication no

設定を変更した後、SSHサービスを再起動します。

sudo systemctl restart sshd

特定のIPアドレスからのみ接続を許可する

特定のIPアドレスからのみSSH接続を許可することで、セキュリティを強化できます。

/etc/hosts.allowファイルに許可するIPアドレスを追加します。

sshd: 192.0.2.1

また、/etc/hosts.denyファイルには、全ての接続を拒否する設定を追加します。

sshd: ALL

これにより、指定したIPアドレスからのみ接続が許可されます。

Fail2BanでSSH攻撃を防ぐ

Fail2Banは、SSHへの不正アクセスを防ぐためのツールです。

特定の回数以上の失敗したログイン試行があった場合、そのIPアドレスを一時的にブロックします。

以下の手順でインストールし、設定します。

  1. Fail2Banをインストールします。
sudo apt-get install fail2ban
  1. 設定ファイルをコピーします。
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
  1. jail.localファイルを編集し、SSHの設定を有効にします。
[sshd]
   enabled = true
  1. Fail2Banを再起動します。
sudo systemctl restart fail2ban

SSHのポート番号を変更する

デフォルトのSSHポート(22)を変更することで、攻撃者が狙うリスクを減少させることができます。

/etc/ssh/sshd_configファイルを編集し、以下の行を変更します。

Port 2222

ポート番号を変更した後、SSHサービスを再起動します。

sudo systemctl restart sshd

接続時には、新しいポート番号を指定する必要があります。

ssh -p 2222 user@example.com

SSHログイン試行回数を制限する

SSHのログイン試行回数を制限することで、ブルートフォース攻撃を防ぐことができます。

/etc/ssh/sshd_configファイルを編集し、以下の行を追加または変更します。

MaxAuthTries 3

この設定により、3回の失敗したログイン試行の後、接続が拒否されます。

設定を変更した後、SSHサービスを再起動します。

sudo systemctl restart sshd

これらの対策を講じることで、SSH接続のセキュリティを大幅に強化することができます。

よくある質問

SSH接続時に「ホストが見つかりません」と表示されるのはなぜ?

「ホストが見つかりません」というエラーメッセージは、指定したホスト名やIPアドレスが正しくない場合に表示されます。

以下の点を確認してください。

  • ホスト名やIPアドレスが正確であるか
  • DNS設定が正しいか
  • ネットワーク接続が正常であるか(pingコマンドで確認)

公開鍵認証がうまくいかない場合の原因は?

公開鍵認証が失敗する場合、以下の原因が考えられます。

  • 公開鍵がリモートサーバーの~/.ssh/authorized_keysに正しく追加されていない
  • 秘密鍵のパーミッションが適切に設定されていないchmod 600 ~/.ssh/id_rsa
  • SSHエージェントに秘密鍵が追加されていない(ssh-addコマンドを使用)
  • サーバー側のSSH設定で公開鍵認証が無効になっている

SSH接続が頻繁に切断されるのはなぜ?

SSH接続が頻繁に切断される原因はいくつかあります。

  • ネットワークの不安定さや接続のタイムアウト
  • サーバー側の設定で接続のアイドルタイムアウトが短く設定されている
  • ファイアウォールやルーターの設定による接続の制限
  • SSHクライアントやサーバーのバージョンの不一致

これらの要因を確認し、必要に応じて設定を見直すことで、接続の安定性を向上させることができます。

まとめ

この記事では、SSHコマンドの基本的な使い方から、セキュリティ強化のための具体的な対策まで幅広く解説しました。

SSHを利用することで、リモートサーバーへの安全な接続やファイル転送が可能になり、システム管理や開発作業が効率的に行えるようになります。

これを機に、SSHの機能を活用し、セキュリティを強化するための設定を見直してみてはいかがでしょうか。

  • URLをコピーしました!
目次から探す