Linuxコマンド辞典 sshコマンド(ネットワーク)

SSHでログインする「ssh」コマンドの概要と使い方を記載しています。

RHEL Fedora CentOS Vine Deblan Ubuntu Plamo

概要・使用方法

書式

$ ssh [オプション] [ユーザ名@]ホスト名 [コマンド]

sshサーバが稼働するリモートマシンへのログインや、リモートマシン上でコマンドを実行します。sshは通信内容を平文でやりとりするrsh/rlogin/telnetとは異なり、通信内容は暗号化されます。リモートログインの他に、接続後にシェルプロンプトを介さずコマンドを実行、リモートホストにインストールされているXアプリケーションをローカルに表示、ファイヤーウォールの中に配置されていて直接アクセスできない端末へもSSHサーバを利用してポート転送することでアクセスできます。

sshでは公開鍵暗号方式の認証ができます。ssh-keygenを利用して作成した秘密鍵、公開鍵の鍵ペアを用意し、公開鍵をリモートサーバのホームディレクトリに配置して利用します。ssh-copy-idを使っても構いません。公開鍵はデフォルトではリモートホストの~/.ssh/authorized_keysに配置します。

SSHサーバを経由してWebサーバーに接続する解説図

Webサーバーに対してSSHでログインする場合は、直接SSHでアクセスすることもできますが、セキュリティを考慮すると踏み台サーバー(SSHサーバ)経由でアクセスするほうがよりセキュリティ的に安全にアクセスできます。また、PCはWindowsやMacOSが多いと思いますので、TeraTermやRloginなどのコンソールツールからアクセスします。

・セッションの切れてしまった端末上でsshを抜けるには、「~.」でエスケープができます。

・SSHはプロトコルとしてversion1とversion2が存在します。version1は脆弱性が見つかっているため、利用しないことをお勧めします。現在はOpenSSHは標準でversion2のみが有効です。

オプション

-b IPアドレスアクセス元として利用するローカルのIPアドレスを指定する
-C通信を圧縮して行う
-c 暗号方式「3des」「blowfish」「des」などを指定する。複数の暗号方式を「.」で記述でき、優先順位を指定できる(デフォルトは3des)
-e 文字指定した文字をエスケープ文字に変換する(デフォルトは~)
-E ファイル名標準エラー出力の代わりにログファイルにデバックログを記録する
-F ファイル名SSHクライアントで利用する設定ファイルを指定する(デフォルトは~/.ssh/config)
-fコマンドを実行する前にSSHをバックグランドに回す。X11クライアントを表示したい場合などに便利
-i 秘密鍵公開鍵認証に利用する秘密鍵を指定する(デフォルトは~/.ssh/id_rsaか~/.ssh/id_dsa)
-L [アドレス1:]ポート1:
リモートホスト1:ポート2
アドレス1のポート1へのアクセスをリモートホストのポート2に転送する
-R[アドレス1:]ポート1:
リモートホスト1:ポート2
リモートホスト1のポート2へのアクセスをアドレス1のポート1へ転送する
-l ユーザ名リモートホストのログインユーザ名を指定する
-p ポート番号リモートホストのポート番号を指定する(デフォルトでは22番)
-4IPv4アドレスで接続する
-6IPv6アドレスで接続する
-XX11の転送を有効にする
-xX11の転送を無効にする
-t仮想端末を割り当てる(多段ログイン時など)
-Nポート転送のみを行う

リモートホストにsshでログインする

$ ssh -l ユーザー名 IPアドレス

実行結果

[rin@centos ~]$ ssh -l rin 192.168.0.102
rin@192.168.0.102's password: 
Last login: Fri Dec 23 07:44:01 2022
[rin@localhost ~]$ 

リモートホストでコマンドを実行する

$ ssh -l ユーザー名 IPアドレス コマンド

実行結果

[rin@localhost ~]$ ssh -l rin 192.168.0.102 ls -l /tmp
rin@192.168.0.102's password: 
合計 2
drwx------ 2 rin  rin     24 12月 23 07:44 ssh-1BJTqXuTjMnk
drwx------ 2 suna suna    24 12月 17 21:33 ssh-vkMrUmw7qsyi
[rin@localhost ~]$ 

コマンド実行前にsshプロセスをバックグランドに回す

sshでリモートホストにログインし、Xアプリケーションをローカルディスプレイに表示できます。オプションを指定しないとプロセスがフォアグランドにとどまるため、シェルのプロンプトが戻ってきません。-fオプションを使うと、コマンドを実行する前にSSHプロセスをバックグランドに回すのでプロンプトが戻ってきます。

$ ssh -f -X space xeyes

プライベートネットワークのWebサーバにアクセスする

プライベートネットワークのWebサーバにアクセスする構成図

WebサーバがTCP:80で待ち受けしている場合、端末から以下のコマンドを実行することで、プライベートネットワーク内にあるWebサーバーにアクセスすることができます。

$ ssh -L 10080:192.168.0.10:80 10.0.0.1 #➊
ユーザー@10.0.0.1:~$                    #❷

➊ではSSHサーバ(10.0.0.1)にログインしていますが、端末の10080/TCPとWebサーバー(10.0.0.1)の80/TCPに転送するオプションです。これを実行するとSSHサーバのプロンプトが返ってきます(❷)。この段階でブラウザを起動して「http://localhost:10080」とアドレスバーに入力することでWebサーバーにアクセスすることができます。