Raspberry Piを踏み台にして 2段SSHで外部サーバーに接続

以下の様に、家のWindows PCからRaspberry Piを踏み台にしてエックスサーバーにSSH接続しました。

事前準備

エックスサーバー側(Linux2)

  1. SSHの設定でSSHのパスフレーズを設定
  2. SSH鍵を生成
  3. このSSH鍵をWindow PCのパソコンにダウンロード
  4. SSHを有効にしてある事
  5. 次の情報を調べておく(ホスト名 (サーバ情報に記載)、ユーザー名(=サーバID))

Raspberry Pi側(Linux1)

  1. SSHを有効化
  2. パスワード設定(パスワードでSSHする場合(ログインパスワード))
  3. 次の情報を調べておく(IPアドレス、ユーザー名(初期値はpi))

SSH_1設定~接続

  1. 一つ目のTeraTermを開いて
  2. 2段目エックスサーバー(Linux2)に転送する設定を記述して
  3. 1段目Raspberry Pi 4(Linux1)に接続
  1. Windows PCで一つ目のTeraTermを開く。
  1. 新しい接続をキャンセルして、
  2. 『設定(S)』→『SSH転送(O)…』を選択
  3. 『追加』を押す
  1. 右の画面が開くので、Raspberry Pi(Linux1)のローカルポート番号を入れて、リモート側ホストはエックスサーバのSSHサーバー名を入れる。 右の画面では10022と入れていますが、予約や使用されていなポート番号であれば、何でも構いません。
  2. エックスサーバのSSHポートは10022固定なのでリモート側ホストのポートは10022しか使えません。
  3. 『OK』を押す。
  1. 右の画面になるので、『OK』を押す。
  1. 『ファイル(F)』→『新しい接続(N)』を選択。
  2. ホスト(T)にRaspberry PiのIPアドレスを入れる。
  3. TCPポート#(P)には22を入れる。
  4. そして『OK』を押す

  1. 『新しい接続』の情報が正しければ、右の画面になる。
  2. ユーザー名(N)を入れる。Raspberry Piの場合は初期値から変更してなければ『pi』。
  3. パスフレーズにはRaspberry Piのpiユーザーのログインパスワードを入れる。
  4. 『OK』を押す。

  1. 右の様にRaspberry Piにつながりました。 この画面は、Windows PCの一つ目のTeraTermの画面。この状態で、
  2. Windows PCでもう二つ目のTeraTermを開く。 それが次のSSH_2。

SSH_2設定~接続

これは簡単です。 先ほど、SSH_1で設定した『SSHポート転送』は、Raspberry Pi(Linux1)内で転送されるポートを設定しています。 その場合のローカルポートとはRaspberry Pi(Linux1)自身のローカルポートです。

  1. SSH_1の『SSHポート転送』でRaspberry Piのローカルポートとして10022を入れたので、ここでも10022を入れてる。
  2. この場合ホスト(T)とは、既にSSH_1でRaspberry Piと繋がっているので、Raspberry Pi自身のローカルIPアドレスを指定します。 自分自身を示すローカルアドレスは127.0.0.1(或いは『localhost』)と決まっているので、127.0.0.1を入力。
  3. これで『OK』を押す。

  1. 右の画面が開くので、ユーザー名にエックスサーバのサーバIDを入れる。
  2. パスフレーズにエックスサーバーのSSHパスフレーズを入れる。
  3. 『RSA/DSA…』を選択して、エックスサーバでSSHを有効化した時に生成して、Windows10にダウンロードした鍵ファイルを選択する。
  4. 『OK』を押す。

おめでとうございます。 つながりました。

TeraTerm2つ立ち上げているので、以下の様に2つ出てきます。 上の画面が、Windows10からRaspberry PiにつながっているTeraTermの画面。 下の画面が、Raspberry Piを通して、Windows10とエックスサーバがつながっているTeraTermの画面です。

Raspberry Piを通しているので、上の画面の接続を切ると、両方切断され両方の画面が消えます。

更にRaspberry Piに転送先を登録するともっと便利

TeraTermの『SSHポート転送』設定をせずに、Raspberry Piの~/.ssh/configを記述しておくと、TeraTermでRaspberry PiにSSH通信した状態で、

コマンドプロンプトから『ssh xserver』とするとパスフレーズを聞いてくるのでエックスサーバーのパスフレーズを入力。 私の場合、SSH接続名をconfigファイルの中で『xserver』としたので、ssh xserverですが、xserverでなくても構いません。

この様にxerverにつながります。簡単ですね。

しかし、この場合エックスサーバーの秘密鍵をRaspberry Piに保存しなければならないので、セキュリティ上よろしくありません。 Window PCにRaspberry Piとエックスサーバの秘密鍵を保存して、Raspberry Piにはエックスサーバーの秘密鍵を保存せずに接続するセキュアで簡単な方法は、Windows側のc:/Users/あなたのユーザー名/.ssh/configにProxyCommandで設定する方法があります。 但し、この場合全てのSSH認証がパスワード認証でなく、秘密鍵認証にしなければなりません。 『Raspberry Piに鍵を使ってSSH通信』をご参考にしてください)

Raspberry Piの~/.sshディレクトリにconfigファイルを作る。

configファイルの記述方法

  1. Raspberry Piの~/.sshディレクトリにconfigファイルを作る。(~$ touch ./.ssh/config)
  2. 権限を600にする。(644権限ではSSH通信をSSHサーバーに拒否される。~$ sudo chmod 600 ./.ssh/config)
  3. configファイルに下の様に記入して保存。
    • 『xserver』と書いたところは付けたいSSH接続名でいい。 
      『~$ ssh SSH接続名』とすると接続される。
    • Hostnameはエックスサーバーのホスト名 (=サーバー番号.xserver.jp)。
    • Portは10022固定。
    • UserはエックスサーバーのサーバーID。
    • IdentifyFileはRaspberry Pi内のエックスサーバーの秘密鍵の場所。
      • 予めRaspberry Piにエックスサーバの秘密鍵を転送しておく。
      • エックスサーバーの秘密鍵の権限を600にしておく。
  4. Raspberry Piを再起動しなくてもconfig反映されました。
Host xserver
    Hostname sv1_ _ _ _.xserver.jp
    Port 10022
    User xs4_ _ _ _
    IdentityFile ~/.ssh/xs4_ _ _ _.key
パラメータ説明
Host適当なSSH接続名。
プロンプトから『ssh SSH接続名』で接続する時に使用する
HostNameホスト名
接続したいSSHサーバーのサーバ番号とドメインかIPアドレス
Port接続したいSSHサーバーのポート番号
通常ポート番号は22
22は攻撃されやすいので、エックスサーバのようにポート番号を変えているサーバーもある。
エックスサーバーは10022
UserSSH接続のユーザー名
ラズパイ(Raspbian)の場合はpi。(初期値)
エックスサーバーではサーバー番号と言っています。
IdentityFile鍵認証する秘密鍵ファイルのパス。
ファイル名も記述する。

エックスサーバーのホスト名は、『サーバー情報』に下の図の様に記載されています。

コメント