「サーバーに接続したいけど、sshコマンドって難しそう…」と感じている方もいるのではないでしょうか?
sshコマンドは、安全にリモートサーバーに接続するための強力なツールです。この記事では、sshコマンドの基本的な使い方を、MacとWindowsの両方で分かりやすく解説します。初心者の方でも理解しやすいよう、具体的な例や図解を交えて説明していきます。sshコマンドを使ってサーバーに安全に接続する方法をマスターしましょう。
SSHコマンドとは?
SSH(Secure Shell)は、ネットワーク上のコンピュータに安全に接続するためのプロトコルです。暗号化技術を用いることで、通信内容を盗聴や改ざんから保護します。SSHは、かつてUnixやLinuxで使われていたTelnet, rlogin, rshといった古いコマンドやプロトコルを1990年代に置き換えたものです 。Telnetではデータが平文で送信されるのに対し、SSHは暗号化によって安全な通信を実現している点が大きな違いです。
sshコマンドを使うことで、リモートサーバーでコマンドを実行したり、ファイルを転送したりすることができます。
SSHコマンドの基本的な使い方
ssh <ユーザー名>@<ホスト名> -p <ポート番号>
<ユーザー名>
: リモートサーバーにログインするユーザー名<ホスト名>
: リモートサーバーのホスト名またはIPアドレス<ポート番号>
: 接続に使用するポート番号(デフォルトは22ですが、サーバーの設定によって異なる場合があります)
Macでの使い方
Macでsshコマンドを使用してリモートコンピュータがMacにアクセスできるようにするには、まずリモートログインを有効にする必要があります。[参考]
- Appleメニュー > システム設定 を選択し、サイドバーで 一般 をクリックし、次に 共有 をクリックします。(下にスクロールする必要がある場合があります。)
- リモートログイン の横にある をクリックします。
- リモートログイン をオンにします。
- 「リモートユーザーにMacのディスクへのフルアクセスを許可」をオンにする場合は、その項目をオンにします。
- 「アクセスを許可する」ポップアップメニューをクリックし、次のいずれかの操作を行います。
- すべてのユーザーにコンピュータへのログインを許可する: 「アクセスを許可する」の横にあるポップアップメニューをクリックし、「すべてのユーザー」を選択します。
- コンピュータにログインできるユーザーを選択する: 「アクセスを許可する」の横にあるポップアップメニューをクリックし、「これらのユーザーのみ」を選択し、リストの下部にある をクリックして、リモートでログインできるユーザーを選択し、「選択」をクリックします。
- ユーザーとグループ には、Macのすべてのユーザーが含まれます。 ネットワークユーザー と ネットワークグループ には、ネットワーク上のユーザーが含まれます。リストからユーザーを削除するには、ユーザーを選択し、 をクリックします。 4
リモートログインを有効にしたら、ターミナルからsshコマンドを実行できます。
- ターミナルを開きます。
- 次のコマンドを入力し、Enterキーを押します。
ssh <ユーザー名>@<ホスト名> -p <ポート番号>
- パスワードを要求されたら、入力してEnterキーを押します。
Windowsでの使い方
Windowsで同様にsshコマンドを使用するには、OpenSSHクライアントをインストールする必要があります。[参考]
- 設定 > アプリ > オプション機能 と進み、OpenSSHクライアントをインストールします。
- もしOpenSSHクライアントが見つからない場合は、 機能の追加 > OpenSSHクライアント と進み、「インストール」をクリックします。
- OpenSSHサーバーもインストールし、サービスからOpenSSH SSH Serverを起動します。自動的に起動するように設定することもできます。
OpenSSHクライアントをインストールしたら、コマンドプロンプトまたはPowerShellからsshコマンドを実行できます。
- コマンドプロンプトまたはPowerShellを開きます。
- 次のコマンドを入力し、Enterキーを押します。
ssh <ユーザー名>@<ホスト名> -p <ポート番号>
- パスワードを要求されたら、入力してEnterキーを押します。
SSHのセキュリティ対策
SSH接続をより安全にするための対策を紹介します。
- ポート番号を変更する
デフォルトのポート番号(22)は攻撃者に知られているため、変更することでセキュリティを強化できます。例えば、ssh -p 2222 <ユーザー名>@<ホスト名>
のように、-p
オプションでポート番号を指定します。[参考]
- 公開鍵認証を使用する
パスワード認証よりも安全な公開鍵認証を使用しましょう。公開鍵認証では、秘密鍵と公開鍵のペアを作成し、公開鍵をサーバーに登録します。サーバーは、クライアントから送られてきた秘密鍵で署名されたデータと、登録されている公開鍵を使って認証を行います。これにより、ネットワーク上にパスワードを送信する必要がなくなり、盗聴のリスクを減らすことができます。
- パスワード認証を無効にする
公開鍵認証を使用する場合は、パスワード認証を無効にすることでセキュリティをさらに強化できます。サーバーのSSH設定ファイル(/etc/ssh/sshd_config
)でPasswordAuthentication
をno
に設定することで、パスワード認証を無効にできます。
- rootログインを無効にする
rootユーザーでのログインを無効にすることで、セキュリティリスクを軽減できます 7。サーバーのSSH設定ファイル(/etc/ssh/sshd_config
)でPermitRootLogin
をno
に設定することで、rootログインを無効にできます。
- ファイアウォールを設定する
ファイアウォールを設定し、許可されたIPアドレスからのみSSH接続を許可しましょう 7。
オプションについて
sshコマンドには、接続をカスタマイズしたり、追加機能を利用したりするための様々なオプションがあります。
接続オプション
オプション | 説明 |
-1 | プロトコルバージョン1のみを使用します。 |
-2 | プロトコルバージョン2のみを使用します。 |
-4 | IPv4アドレスのみを使用します。 |
-6 | IPv6アドレスのみを使用します。 |
-p port | リモートホストに接続するポート。 |
SSHプロトコルにはバージョン1とバージョン2があり、バージョン2の方がセキュリティが強化されています。そのため、特別な理由がない限りはバージョン2を使用することをお勧めします。 -1
オプションと-2
オプションでバージョンを指定することができます。
認証オプション
オプション | 説明 |
-A | 認証エージェント接続の転送を有効にします。 |
-a | 認証エージェント接続の転送を無効にします。 |
-i identity_file | 公開鍵認証のIDキー(秘密鍵)が読み取られるファイルを指定します。 |
-i
オプションで秘密鍵ファイルを指定することで、公開鍵認証を使用することができます。
転送オプション
オプション | 説明 |
-C | データ圧縮を使用します。 |
-D [bind_address:] port | 動的なアプリケーションレベルのポート転送。 |
-L address | ローカルのポートフォワーディングを指定します。 |
-R address | リモートのポートフォワーディングを指定します。 |
-C
オプションでデータ圧縮を有効にすることで、転送速度を向上させることができます。 -D
, -L
, -R
オプションは、SSHトンネリングに使用するオプションです。
その他
オプション | 説明 |
-E log_file | デバッグログを標準エラーではなくlog_fileに追加します。 |
-F configfile | ユーザーごとの構成ファイルを指定します。 |
-g | リモートホストがローカルの転送されたポートに接続できるようにします。 |
-J [user@] host [:port] | 最初にpjumpホスト[(/iam/jump-host)にssh接続を行い、そこから最終的な宛先へのTCP転送を確立することにより、ターゲットホストに接続します。 |
-l login_name | リモートマシンにログインするユーザーを指定します。 |
-q | クワイエットモード。 |
-V | バージョン番号を表示します。 |
-v | 詳細モード。 |
-X | X11転送を有効にします。 |
-x | X11転送を無効にします。 |
-Y | 信頼できるX11転送を有効にします。 |
-X
オプションでX11転送を有効にすることで、リモートサーバーでGUIアプリケーションを実行することができます。 -Y
オプションもX11転送を有効にしますが、-X
オプションよりもセキュリティリスクが高いため、注意が必要です。
SSHキー管理
SSHキーペアの作成、サーバーへの公開鍵のコピー、SSHエージェントの使用など、SSHキー管理について解説します。
SSHキーペアの作成
SSHキーペアは、ssh-keygen
コマンドで作成できます 2。
ssh-keygen -t rsa
このコマンドを実行すると、秘密鍵(id_rsa
)と公開鍵(id_rsa.pub
)が生成されます。
サーバーへの公開鍵のコピー
生成した公開鍵は、ssh-copy-id
コマンドでサーバーにコピーできます 2。
ssh-copy-id <ユーザー名>@<ホスト名>
このコマンドを実行すると、公開鍵がサーバーの~/.ssh/authorized_keys
ファイルに追加されます。
SSHエージェントの使用
SSHエージェントを使用すると、秘密鍵をメモリに保存し、複数のSSH接続で共有することができます 2。
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
ssh-agent
コマンドでエージェントを起動し、ssh-add
コマンドで秘密鍵をエージェントに追加します。
ファイル転送
scp
コマンドを使用すると、ローカルマシンとリモートサーバー間で安全にファイルを転送できます 2。
ローカルからリモートへファイルをコピーする
ローカルマシンからリモートサーバーへファイルをコピーするには、次のコマンドを実行します。
scp <ローカルファイルパス> <ユーザー名>@<ホスト名>:<リモートファイルパス>
例えば、local.txt
というファイルをリモートサーバーの/home/user/
ディレクトリにコピーするには、次のコマンドを実行します。
scp local.txt user@example.com:/home/user/
リモートからローカルへファイルをコピーする
リモートサーバーからローカルマシンへファイルをコピーするには、次のコマンドを実行します。
scp <ユーザー名>@<ホスト名>:<リモートファイルパス> <ローカルファイルパス>
例えば、リモートサーバーの/home/user/remote.txt
というファイルをローカルマシンのカレントディレクトリにコピーするには、次のコマンドを実行します。
scp user@example.com:/home/user/remote.txt .
scpコマンドのオプション
scp
コマンドには、様々なオプションがあります。
オプション | 説明 |
-r | ディレクトリを再帰的にコピーします。 |
-C | データ圧縮を使用します。 |
-v | 詳細情報を表示します。 |
-p | 転送されたファイルの最終更新タイムスタンプを保持します。 |
例えば、-r
オプションを使用してディレクトリを再帰的にコピーするには、次のコマンドを実行します。
scp -r local_directory user@example.com:/home/user/
SSHトンネリング
SSHトンネリングを使用すると、ローカルマシンとリモートサーバー間で安全な通信チャネルを確立できます。
ローカルポートフォワーディング
ローカルポートフォワーディングを使用すると、ローカルマシンのポートをリモートサーバーのポートに転送できます。
ssh -L <ローカルポート>:<宛先ホスト>:<リモートポート> <ユーザー名>@<ホスト名>
例えば、ローカルマシンのポート8080をリモートサーバーのポート3000に転送するには、次のコマンドを実行します。
ssh -L 8080:localhost:3000 user@example.com
リモートポートフォワーディング
リモートポートフォワーディングを使用すると、リモートサーバーのポートをローカルマシンのポートに転送できます。
ssh -R <リモートポート>:<宛先ホスト>:<ローカルポート> <ユーザー名>@<ホスト名>
例えば、リモートサーバーのポート8080をローカルマシンのポート3000に転送するには、次のコマンドを実行します。
ssh -R 8080:localhost:3000 user@example.com
ダイナミックポートフォワーディング
ダイナミックポートフォワーディングを使用すると、SOCKSプロキシを介して安全に通信できます。
ssh -D <ローカルポート> <ユーザー名>@<ホスト名>
例えば、ローカルマシンのポート8080でSOCKSプロキシを起動するには、次のコマンドを実行します。
ssh -D 8080 user@example.com
SSH configファイル
SSH configファイル(~/.ssh/config
)を使用すると、複数のサーバーへの接続を管理できます 2。
SSH configファイルには、サーバーごとにエイリアスを定義したり、接続オプションを指定したりすることができます。
例えば、example.com
というサーバーにmy_server
というエイリアスを定義し、ポート番号を2222に設定するには、SSH configファイルに次の設定を追加します。
Host my_server
HostName example.com
Port 2222
この設定を追加すると、ssh my_server
というコマンドでexample.com:2222
に接続することができます。
参考:https://phoenixnap.com/kb/linux-ssh-commands
よくあるエラーと解決方法
sshコマンドを実行する際に発生する可能性のあるエラーと、その解決方法を紹介します。
Connection timed out
このエラーは、クライアントがサーバーからの応答を一定時間内に受信できなかった場合に発生します 。
考えられる原因
- サーバーが起動していない:サーバーの電源が入っているか、ネットワークに接続されているかを確認してください。
- SSHポートが正しくない:サーバーのSSHポートがデフォルトの22番ポート以外に変更されている場合は、
-p
オプションで正しいポート番号を指定してください。 - ファイアウォールがSSH接続をブロックしている:サーバーまたはクライアントのファイアウォール設定を確認し、SSH接続を許可してください。
- ネットワーク接続に問題がある:ネットワーク接続を確認してください。pingコマンドなどでサーバーに接続できるか確認しましょう。
- サーバーの負荷が高い:サーバーの負荷が高い場合は、しばらく待ってから再度接続を試みてください。
- SSHのタイムアウト値を増やす:
ssh -o ConnectTimeout=30 user@example.com
のように、ConnectTimeout
オプションでタイムアウト値を増やすことができます。
Connection refused
このエラーは、SSHデーモンが実行されていないか、ファイアウォールによってSSH接続がブロックされている場合に発生します。
考えられる原因
- SSHデーモンが実行されていない:サーバーでSSHデーモン(
sshd
)が実行されていることを確認してください。 - ファイアウォールがSSH接続をブロックしている:サーバーまたはクライアントのファイアウォール設定を確認し、SSH接続を許可してください。
解決方法
- SSHデーモンを起動する:サーバーでSSHデーモンを起動してください。
- ファイアウォール設定を確認する:サーバーまたはクライアントのファイアウォール設定を確認し、SSH接続を許可してください。
Permission denied
このエラーは、ユーザー名またはパスワードが間違っているか、サーバーが公開鍵認証を受け入れていない場合に発生します。
考えられる原因
- ユーザー名またはパスワードが間違っている:ユーザー名とパスワードが正しいことを確認してください。
- 公開鍵がサーバーに登録されていない:
ssh-copy-id
コマンドで公開鍵をサーバーにコピーしてください。 - 公開鍵のパーミッションが正しくない:秘密鍵のパーミッションを
600
に設定してください。 - SSHエージェントが正しく動作していない:SSHエージェントを再起動してください。
- サーバー側のSSH設定が正しくない:サーバーのSSH設定ファイル(
/etc/ssh/sshd_config
)でPubkeyAuthentication
がyes
に設定されていること、AuthorizedKeysFile
のパスが正しいことを確認してください。
解決方法
- ユーザー名とパスワードが正しいことを確認する
- 公開鍵をサーバーに登録する
- 公開鍵のパーミッションを
600
に設定する - SSHエージェントを再起動する
- サーバー側のSSH設定を確認する
Host key verification failed
このエラーは、リモートサーバーの鍵が変更されている場合に発生します。
考えられる原因
- リモートサーバーの鍵が変更された:サーバーの鍵が変更された場合は、
known_hosts
ファイルから該当するホストの鍵を削除し、再度接続してください。 - 中間者攻撃を受けている:中間者攻撃を受けている可能性があります。接続先が正しいことを確認してください。
解決方法
known_hosts
ファイルから該当するホストの鍵を削除する- 中間者攻撃の可能性を調査する
結論
この記事では、SSHコマンドの基本的な使い方から、セキュリティ対策、ファイル転送、トンネリング、そしてトラブルシューティングまで、幅広く解説しました。SSHは安全にリモートサーバーに接続するための強力なツールであり、正しく使用することでサーバー管理やファイル転送を効率的に行うことができます。
この記事で紹介した情報以外にも、SSHには多くの機能やオプションがあります。より深くSSHについて学びたい方は、公式ドキュメントやオンラインリソースなどを参照してください。
※注意:情報が古かったり、確認不足により操作方法が間違っている可能性もあります。他のブログ記事も参考にしていただきますようよろしくお願いいたします。
たび友|サイトマップ
関連webアプリ
たび友|サイトマップ:https://tabui-tomo.com/sitemap
検引友:https://kentomo.tabui-tomo.com
ピー友:https://pdftomo.tabui-tomo.com