sudo ssh で、sudo実行しているユーザの.ssh/configを使う

ubuntuを相変わらず使ってます。
開発するとき、開発用のWebサーバーの表示をローカル側のパソコンで表示したい場合、ssh の -Lオプションが便利です。
ただ、一般ユーザだと、自分のパソコンの1024番未満のポートは自由に設定できないため、ポートフォワーディングできません。

なので、
sudo ssh host_name -L80:localhost:80
などと管理者権限で実行する必要があります。

このとき、host_name は、一般ユーザの.ssh/config に記述していて、わざわざ、rootの .ssh/configにも書くのは面倒です。
こんな時、ssh の -F オプションで、別の.ssh/config などホスト設定を読み込ますことができます。

動作ログ

configファイル指定なしのsudo ssh はNG

動作させる環境の前提として、rootの .ssh/config には設定がないものとします。ここに書いてあれば、sudo ssh だけでOKですので ^^;

taka@cfnx2:~$ sudo ssh v3510
ssh: Could not resolve hostname v3510: Temporary failure in name resolution

現在のユーザの.ssh/config をコンフィグとして読み込む

無事、サーバー見つかり、ssh 成功。

taka@cfnx2:~$ sudo ssh v3510 -F .ssh/config
taka@xxx.1.53.xxx's password: 
Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-51-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

Expanded Security Maintenance for Applicationsが無効化されています。

0のアップデートはすぐに適用されます。

9個の追加のセキュリティアップデートが、ESM Appsによって適用できます。
ESM Appsの有効化方法についてはこちらを参照してください: at https://ubuntu.com/esm

Last login: Mon Jan  6 15:18:52 2025 from 192.168.11.1
taka@v3510:~$ 
ログアウト
Connection to xxx.1.53.xxx closed.

ポートフォワーディングつきでssh

ログイン成功。特にポートフォワーディングのエラーも出ていません。

taka@cfnx2:~$ sudo ssh v3510 -F .ssh/config -L80:localhost:80
taka@xxx.1.53.xxx's password: 
Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-51-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

Expanded Security Maintenance for Applicationsが無効化されています。

0のアップデートはすぐに適用されます。

9個の追加のセキュリティアップデートが、ESM Appsによって適用できます。
ESM Appsの有効化方法についてはこちらを参照してください: at https://ubuntu.com/esm

Last login: Mon Jan  6 15:19:35 2025 from 192.168.11.1
taka@v3510:~$ 
ログアウト
Connection to xxx.1.53.xxx closed.
taka@cfnx2:~$ 

ちなみに、一般ユーザで80番をポートフォワーディングしようとすると権限エラー(Permission denied)が出ます。ログインはできます。

taka@cfnx2:~$ ssh v3510 -L80:localhost:80
taka@xxx.1.53.xxx's password: 
bind [127.0.0.1]:80: Permission denied
channel_setup_fwd_listener_tcpip: cannot listen to port: 80
Could not request local forwarding.
Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-51-generic x86_64)

 (以下省略)

ポートフォワーディングのメリット

ポートフォワーディングすると、指定ポートの通信をssh接続しているパソコン間で転送してくれます。暗号化されているので安全でもあります。

具体的には、例えば、80番をポートフォワーディングしているとします。
このとき、ローカル側のパソコンで、ブラウザで以下のURLを開きます。
http://localhost
すると、sshが通信をssh先のwebサーバーにつなげてくれて、webサーバーでブラウザを開いているかのように表示してくれます。

下図はクライアント側でのブラウザ表示ですが、実際には、ssh先のWebサーバーが提供してくれてます。
これで、開発用サーバーにvs code でアクセスしつつ、結果はローカルパソコンのブラウザを見ながら開発ができます。
vs code のターミナルウィンドウを開くと、そこからもポートフォワーディングの設定はできるのですが、80番など1023番以下の設定は権限上できないので、sudo ssh を使ってポートフォワーディングします。

実際に使うには、ポートフォワーディング以外にも、
http://simplechat.localhost 
http://sub2.localhsot

などのように、サブドメインに応じて、表示させるウェブアプリを切り替えるために、ローカルパソコンの /etc/hosts ファイルへの追加、開発サーバーのvhosts設定 で ドメインでのルートディレクトリの切り替えなどが必要になります。

aliasでちょっとだけ便利にする

下記のように、
alias sudossh='sudo ssh -F .ssh/config -L80:localhost:80'
とalias登録しておくと、その後にconfigに登録したHOST名を入力すれば、ポートフォワーディングして接続できます。

taka@cfnx2:~$ a | grep ssh
alias sudossh='sudo ssh -F .ssh/config -L80:localhost:80'
taka@cfnx2:~$ sudossh v3510
taka@118.1.53.206's password: 
Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-51-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

Expanded Security Maintenance for Applicationsが無効化されています。

0のアップデートはすぐに適用されます。

9個の追加のセキュリティアップデートが、ESM Appsによって適用できます。
ESM Appsの有効化方法についてはこちらを参照してください: at https://ubuntu.com/esm

Last login: Fri Jan 10 15:46:23 2025 from 192.168.11.1
taka@v3510:~$ 


いいなと思ったら応援しよう!