SSHを活用しよう

SSH(secure shell)は安全に他のコンピュータと通信するためのツールである(コマンドは ssh)。MacやLinuxなどUNIX系OSはもとより、今はWindowsにも標準で入っているはず。

ssh 相手のコンピュータの名前かIPアドレス

と打ち込めば、相手のコンピュータにつながる。

相手のコンピュータではSSHサーバ(SSHデーモン、sshd)が動いていなければならない。Macならシステム設定の「一般」→「リモートログイン」をオンにすればいい。

SSHサーバのデフォルトポートは22であるが、インターネットに全開のコンピュータなら、ポートを変更しておくと外部からの攻撃が激減する。ポート設定は /etc/ssh/sshd_configPort XXXX などと書けばよい(XXXXは1024超の任意の番号)。以下では example.jp のSSHサーバのポートがXXXXであるとする。この場合

ssh -p XXXX example.jp

で接続する。

SSHで接続しようとすると、デフォルトではログインパスワードを聞かれる。いちいちパスワードを打つのは面倒だしセキュリティ的にも心配なので、パスワードなしのログインの設定をしておくのが推奨である。

SSHの便利な点は、単にリモートマシンにログインしてコマンドを打つだけではなく、ローカルマシンのポートをリモートマシンにフォワード(転送)できる点にある。例えば

ssh -L 1234:localhost:1234 -p XXXX example.jp

と打ち込めば、ローカルのポート1234(←)をリモートの1234(→)にフォワードする。リモートで走っているLM Studioをローカルから使うのに便利である。

リモートマシンが自宅のNATルータの内側にあるマシンで、出張先から別のPCで接続したいときには、NATルータの設定で特定のポートだけ内側の特定のマシンに転送するように設定することもできるが、セキュリティ的に心配である。ルータの設定を変えずにルータ越えするには、次のようにして逆向きSSHトンネルを一時的に掘ればよい。ただし、どちらからも接続できる第三のサーバが必要になる。

まず、自宅のマシンから次のように第三のサーバ example.jp に接続する。自宅のマシンのSSHポートは22のままとする。

ssh -N -R 127.0.0.1:YYYY:localhost:22 -p XXXX example.jp

ここで -N はサーバ example.jp でシェルを起動しないオプションであるが、これは省略してもよい。

外出先からは

ssh -p XXXX example.jp

で第三のサーバに接続し、そこからさらに

ssh -p YYYY localhost

とすると自宅に接続できる。あるいはこの2つをまとめて

ssh -J -p XXXX example.jp -p YYYY localhost

ともできる。先ほどのポート1234をフォワードすることも含めれば

ssh -L 127.0.0.1:1234:127.0.0.1:1234 -J -p XXXX example.jp -p YYYY localhost

とすればよい。

最初の自宅から第三のサーバへのSSH接続が出張中に切れてしまうと困るので、自動的に再接続するために autossh というツールを使うと便利である。Mac(Homebrew)なら brew install autossh でインストールできる。これを使うやり方:

autossh -M 0 -N -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R 127.0.0.1:YYYY:localhost:22 -p XXXX example.jp