sshコマンド

暗号化されたネットワーク接続を介してリモートシステムに安全に接続します。

概要

SSH(Secure Shell)は、リモートコンピュータに安全にアクセスし、リモートでコマンドを実行するためのプロトコルです。安全でないネットワーク上で、二つの信頼されていないホスト間の暗号化された通信を提供し、telnetやrshなどの古いプロトコルに代わるものです。SSHは一般的に、リモートログイン、コマンド実行、ファイル転送、および他のアプリケーションのトンネリングに使用されます。

オプション

-p port

リモートホストに接続するポートを指定します(デフォルトは22)

$ ssh -p 2222 [email protected]
[email protected]'s password: 
Last login: Mon May 5 10:23:45 2025 from 192.168.1.100
[email protected]:~$

-i identity_file

公開鍵認証に使用するアイデンティティ(秘密鍵)を読み込むファイルを選択します

$ ssh -i ~/.ssh/my_private_key [email protected]
Last login: Mon May 5 09:15:30 2025 from 192.168.1.100
[email protected]:~$

-v

詳細モード、接続問題のデバッグに役立ちます

$ ssh -v [email protected]
OpenSSH_8.9p1, LibreSSL 3.3.6
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to example.com port 22.
debug1: Connection established.
...

-L local_port:remote_host:remote_port

ローカルポートをリモートホストのポートに転送します

$ ssh -L 8080:localhost:80 [email protected]
[email protected]'s password: 
Last login: Mon May 5 11:30:22 2025 from 192.168.1.100

-X

X11転送を有効にし、グラフィカルアプリケーションをローカルに表示できるようにします

$ ssh -X [email protected]
[email protected]'s password: 
Last login: Mon May 5 14:45:10 2025 from 192.168.1.100
[email protected]:~$ firefox

-t

疑似端末の割り当てを強制します。リモートシステム上でインタラクティブなプログラムを実行する際に役立ちます

$ ssh -t [email protected] "sudo apt update"
[email protected]'s password: 
[sudo] password for user: 
Get:1 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
...

使用例

基本的なSSH接続

$ ssh [email protected]
[email protected]'s password: 
Last login: Mon May 5 08:30:15 2025 from 192.168.1.100
[email protected]:~$

リモートホストでのコマンド実行

$ ssh [email protected] "ls -la"
total 32
drwxr-xr-x 5 user user 4096 May  5 08:30 .
drwxr-xr-x 3 root root 4096 Jan  1 00:00 ..
-rw-r--r-- 1 user user  220 Jan  1 00:00 .bash_logout
-rw-r--r-- 1 user user 3771 Jan  1 00:00 .bashrc
drwx------ 2 user user 4096 May  5 08:30 .ssh

鍵ベースの認証を使用したSSH

$ ssh -i ~/.ssh/id_rsa [email protected]
Last login: Mon May 5 12:15:30 2025 from 192.168.1.100
[email protected]:~$

ポート転送(ローカルからリモートへ)

$ ssh -L 8080:localhost:80 [email protected]
[email protected]'s password: 
Last login: Mon May 5 15:20:45 2025 from 192.168.1.100

ヒント:

パスワードなしログイン用のSSH鍵の設定

ssh-keygenでSSH鍵ペアを生成し、ssh-copy-id [email protected]で公開鍵をリモートサーバーにコピーします。これにより、接続ごとにパスワードを入力する必要がなくなります。

SSH設定ファイルの使用

頻繁にアクセスするサーバーの接続設定を保存するために、~/.ssh/configファイルを作成します:

Host myserver
    HostName example.com
    User username
    Port 2222
    IdentityFile ~/.ssh/special_key

その後、単にssh myserverで接続できます。

SSH接続を維持する

タイムアウトを防ぐために、~/.ssh/configファイルに以下の行を追加します:

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

鍵管理にSSHエージェントを使用する

ssh-agentを起動し、ssh-addで鍵を追加すると、セッション中にパスフレーズを繰り返し入力する必要がなくなります。

よくある質問

Q1. SSH鍵を生成するにはどうすればよいですか?

A. ssh-keygenコマンドを使用します。デフォルトはssh-keygen -t rsa -b 4096で、4096ビットのRSA鍵ペアを作成します。

Q2. SSH公開鍵をサーバーにコピーするにはどうすればよいですか?

A. ssh-copy-id [email protected]を使用して、公開鍵をリモートサーバーのauthorized_keysファイルにコピーします。

Q3. SSHを使用してファイルを転送するにはどうすればよいですか?

A. SSHプロトコルを使用する関連コマンドのscp(セキュアコピー)またはsftp(セキュアファイル転送プロトコル)を使用します。

Q4. SSH接続がタイムアウトしないようにするにはどうすればよいですか?

A. SSH設定ファイルでServerAliveIntervalServerAliveCountMaxを設定するか、-oオプションを使用します:ssh -o ServerAliveInterval=60 [email protected]

Q5. SSH接続の問題をトラブルシューティングするにはどうすればよいですか?

A. -v(詳細)オプションを使用し、より詳細な情報を得るには追加のv(-vvまたは-vvv)を使用します。

参考文献

https://man.openbsd.org/ssh.1

改訂履歴