前回の投稿では、SSHキージェネレーション(Key Generation)を通して、安全なSSH接続の準備を整えました。
前回の投稿を見る : SSH keygen: 初心者のための完全ガイド
これから実際にSSHを使用してリモートサーバーに接続する方法を学びます。SSHコマンドは思ったより簡単ですが、いくつかの原則や便利なオプションを知っておけば、さらに効率的に使えます。
SSHコマンド、どのように書けばよいでしょうか?
SSHコマンドの基本形式は以下の通りです。
ssh [オプション] [ユーザー名]@[ホストアドレス] [コマンド]
それぞれの要素が何を意味するのか詳しく見ていきましょう。
-
ssh
: SSHクライアントを実行するコマンドです。 -
[オプション]
: SSH接続方法を制御するさまざまなオプションを指定できます。例えば、特定のキーファイルを使用したり、ポートフォワーディングを設定したりする機能があります。 (後ほど詳しく扱います。) -
[ユーザー名]
: 接続したいリモートサーバーのユーザーアカウント名です。もしローカルコンピュータのユーザー名とリモートサーバーのユーザー名が同じであれば、省略できます。 -
[ホストアドレス]
: 接続したいリモートサーバーのIPアドレスまたはドメイン名です。 -
[コマンド]
(オプション): SSH接続後、リモートサーバーで即実行したいコマンドがあればここに入力します。このコマンドが実行された後、SSHセッションは終了します。この部分を省略すると、サーバーにログインして対話型シェル(Shell)を使用できます。
コマンド記述の原則と覚えやすいヒント
SSHコマンドは「どのユーザーがどのサーバーに接続するのか?」を明確に示す構造です。
-
基本原則:
ssh ユーザー名@ホストアドレス
- 例:
ssh ubuntu@192.168.1.100
(192.168.1.100サーバーのubuntu
アカウントに接続) - 例:
ssh root@mywebserver.com
( https://www.google.com/search?q=mywebserver.com サーバーのroot
アカウントに接続) -
覚えやすいヒント:
-
「私はローカルユーザーで、あそこ(リモートサーバー)にいる誰か(リモートユーザー)に入る!」と考えてみてください。
ssh
(私は接続する)[ユーザー名]@
(誰として)[ホストアドレス]
(どこに)- よく接続するサーバーは
~/.ssh/config
ファイルを活用すると、毎回長いアドレスを入力する必要なく別名(Alias)を使って便利に接続できます。 (この部分は次の投稿でさらに詳しく取り扱います!)
- 例:
便利なSSHオプションの解剖
SSHはさまざまな状況に応じて強力な機能を持ついくつかのオプションを提供しています。いくつかの主要なオプションを紹介します。
1. -i <IdentityFile>
:特定の秘密鍵ファイルを指定
複数のSSHキーを持っている場合、特定のサーバーに接続するために特定の秘密鍵を使用したい場合に使用します。基本的には~/.ssh/id_rsa
や~/.ssh/id_ed25519
を使用しますが、他の名前で作成したり、複数のキーを管理する際に便利です。
- 使用法:
ssh -i ~/.ssh/my_custom_key ubuntu@my_server.com
-
例:
ssh -i ~/.ssh/id_ed25519_my_server ubuntu@example.com
Enter passphrase for key '/home/youruser/.ssh/id_ed25519_my_server':
2. -p <Port>
:リモートサーバーのSSHポートを指定
ほとんどのSSHサーバーは基本的に22番ポートを使用します。しかし、セキュリティ上の理由から管理者がSSHポートを変更していることがよくあります。その場合は-p
オプションを使用して変更されたポート番号を指定する必要があります。
- 使用法:
ssh -p 2222 your_user@your_server.com
(2222番ポートに接続) -
例:
ssh -p 2222 myuser@192.168.1.100 The authenticity of host '192.168.1.100:2222 (...)' can't be established. Are you sure you want to continue connecting (yes1/no/[fingerprint])? yes Warning: Permanently added '192.168.1.100:2222' (ED25519) to the list of known hosts. Last login: Mon Jun 17 10:00:00 2024 from your_ip myuser@server:~ $
3. -X
:X11フォワーディングを有効にする(グラフィックプログラムを実行)
リモートサーバーにGUI(Graphical User Interface)アプリケーションがインストールされており、それをローカルコンピュータの画面に表示させて使用したい場合に使用します。X Window Systemを使用し、ローカルシステムにXサーバーが実行中である必要があります(macOSはXQuartz、WindowsはPuTTY + VcXsrvなどが必要です)。
- 使用法:
ssh -X your_user@your_server.com
-
例:
ssh -X myuser@remote-gui-server.com myuser@remote-gui-server:~ $ firefox &
接続後、リモートサーバーでfirefoxを実行(ローカル画面にfirefoxウィンドウが表示される)。
性能が良くない場合やネットワーク遅延がひどい場合は不便になることがあります。
4. -L <LocalPort>:<RemoteHost>:<RemotePort>
:ローカルポートフォワーディング(Local Port Forwarding)
ローカルコンピュータの特定のポート(LocalPort)に入ってくる接続をSSHトンネルを通じてリモートサーバー(RemoteHost)の特定のポート(RemotePort)に転送する機能です。主にファイアウォールの背後にあるサービスに接続したり、ローカルで開発したアプリケーションがリモートデータベースに接続する必要がある場合に便利です。
- 使用法:
ssh -L 8080:localhost:80 your_user@your_server.com
- このコマンドはローカルコンピュータの8080番ポートに入るすべての接続を
your_server.com
を経由してyour_server.com
内部の80番ポート(localhost:80
はyour_server.com
自体を意味します)に転送します。
- このコマンドはローカルコンピュータの8080番ポートに入るすべての接続を
-
例:
-
リモートサーバーのウェブサーバー(80番ポート)に直接接続できず、SSHのみ可能な場合:
ssh -L 8080:localhost:80 myuser@my_web_server.com
このコマンドを実行した後、ローカルウェブブラウザで http://localhost:8080 に接続すると、
実際には my_web_server.com の80番ポートに接続するのと同じ効果になります。 -
ローカルで
my_db_app
がリモートdb_server.internal
の3306番MySQLポートに接続する必要があるが、db_server.internal
はmy_app_server.com
からのみ接続可能な場合:ssh -L 3307:db_server.internal:3306 myuser@my_app_server.com
このコマンドを実行した後、ローカルで my_db_app が localhost:3307 に接続すると、
my_app_server.com を経由して db_server.internal の3306番ポートに接続します。-
(3307を使用する理由は、ローカルにすでに3306ポートを使用しているMySQLがある可能性があるためです。)
-
-
5. -N
:リモートコマンドの実行なしにポートフォワーディングのみ維持
-L
または-D
(Dynamic Port Forwarding, SOCKSプロキシ)オプションとともに使用され、SSHセッションを開きますが、リモートサーバーでシェルコマンドを実行せず、単にポートフォワーディング機能のみを維持します。主にバックグラウンドでポートフォワーディングトンネルを維持する際に便利です。
- 使用法:
ssh -N -L 8080:localhost:80 your_user@your_server.com
-
例:
ssh -N -L 8080:localhost:80 myuser@my_web_server.com &
バックグラウンド(&)でポートフォワーディングトンネルを開いたままにし、ローカルで web ブラウザにアクセス可能
6. -f
:SSHセッションをバックグラウンドに切り替え
SSH接続が成功した後、SSHクライアントプロセスをバックグラウンドに送るオプションです。主に-N
オプションとともに使われ、ポートフォワーディングトンネルをバックグラウンドで維持するために使用します。
- 使用法:
ssh -f -N -L 8080:localhost:80 your_user@your_server.com
-
例:
ssh -f -N -L 8080:localhost:80 myuser@my_web_server.com
このコマンドを実行すると、すぐにターミナル制御が戻り、SSHトンネルがバックグラウンドで実行されます。
ps aux | grep ssh コマンドでプロセス確認可能
まとめ
今回はSSHコマンドの基本的な構造とともに、よく使用される重要なオプションを見てきました。特に-p
を使用したポート指定と-L
を使用したポートフォワーディングは実務で非常に頻繁に活用されるので、ぜひ覚えておいてください。
次回の投稿では、~/.ssh/config
ファイルを活用してSSH接続をさらに便利に管理する方法について説明します。疑問があればいつでもコメントでお知らせください!
コメントはありません。