先方に穴を掘って頂き、その穴を使って相手方にアクセスする.
まだあんまり分かっていなのだが...大抵はfirewallで守られている組織のネットワーク.
外部から内部に入るには vpn とか組織が用意した経路を使って中の特定のマシンにアクセスします(ポリシーで定められているでしょう)
っで、Teamviewer/AnyDeskもそうですが、外部に内と外との仲立ちをしてくれるものがあって複雑なことをされて内部に入れるツールがまぁーある.
(使えるかはその組織のポリシーですよ)
今回のreverse ssh tunnelingを使うと、まぁーTeamviewer/AnyDeskのように外部から内部にアクセスできるそうな.
手順は
ってな感じ.
ここではreverse ssh tunnelingを使ってどうゆう風にして外部から内部に入れるかを示す
まずは、組織内のマシンから中継のマシンにパスフレーズなしでのssh接続できるように設定します. まぁー公開鍵の配布ですね.
場所 | ホスト名 | 役目 |
組織内のマシン | centos7 | 「reverse ssh tunneling」を中継マシンに張る |
組織外のマシン | rockylinux9 | 中継マシン |
組織外のPC | cc | 組織外から中継マシンを経て内部に入る |
[saber@centos7 ~]$ ssh-keygen -t ed25519
[saber@centos7 ~]$ ls -la .ssh/
total 8
drwx------. 2 saber saber 46 Nov 5 12:50 .
drwx------. 3 saber saber 95 Nov 5 12:50 ..
-rw-------. 1 saber saber 399 Nov 5 12:50 id_ed25519
-rw-r--r--. 1 saber saber 95 Nov 5 12:50 id_ed25519.pub
[saber@centos7 ~]$ cat ,ss/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN/OGTsKP6kV/ZEVyWzIQOi3FbXDWhO+OvuQDebWm9V+ saber@centos7
[saber@centos7 ~]$
この「.ssh/id_ed25519.pub」の内容を「中継マシン」に組み込む
「組織内のマシン」で作った公開鍵(id_ed25519.pub)の中身を「中継マシン」の「~/.ssh/authorized_keys」に書き込む
[saber@ik1-yyy-xxxxx ~]$ mkdir .ssh
[saber@ik1-yyy-xxxxx ~]$ echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN/OGTsKP6kV/ZEVyWzIQOi3FbXDWhO+OvuQDebWm9V+ saber@centos7" >> ~/.ssh/authorized_keys
[saber@ik1-yyy-xxxxx ~]$
[saber@ik1-yyy-xxxxx ~]$ chmod 700 .ssh
[saber@ik1-yyy-xxxxx ~]$ chmod 600 .ssh/authorized_keys
っで「組織内のマシン」---ssh---> 「中継マシン」へのパスワードなしssh接続が出来るかを確認します.
[saber@centos7 ~]$ ssh -i .ssh/id_ed25519 saber@ik1-yyy-xxxxx.vs.sakura.ne.jp
:
:
SAKURA internet [Virtual Private Server SERVICE]
Last login: Sun Nov 5 13:02:17 2023 from xxx.xxx.xxx.xxx
[saber@ik1-yyy-xxxxx ~]$
っと行けた.
中継マシンにはbashなアカウントなら「TMOUT=0」を入れて勝手にセッションが切れないようにした方がいいかも.
[saber@ik1-yyy-xxxxx ~]$ echo "export TMOUT=0" >> ~/.bashrc
[saber@ik1-yyy-xxxxx ~]$ exit
logout
Connection to ik1-yyy-xxxxx.vs.sakura.ne.jp closed.
[saber@centos7 ~]$
[saber@centos7 ~]$ ssh -i .ssh/id_ed25519 saber@ik1-yyy-xxxxx.vs.sakura.ne.jp
[saber@ik1-yyy-xxxxx ~]$ echo $TMOUT
0
[saber@ik1-yyy-xxxxx ~]$
「組織内のマシン」から「中継マシン」に「reverse ssh tunneling」を張る.
ここでは「中継マシン」に「reverse ssh tunneling」で「2222/tcp」を開けるようにします. 「中継マシン」の「2222/tcp」が「組織内のマシン」の「22/tcp」に繋がる感じ.
[saber@centos7 ~]$ ssh -N -R 2222:localhost:22 -i .ssh/id_ed25519 saber@ik1-yyy-xxxxx.vs.sakura.ne.jp
:
:
「-N」は接続した後は何もコマンドを実行しない.
「-fN」とするとバックグランドジョブとなってプロンプトが戻ってきます. バックグランドでは相手方にログインした状態にはなってます.
「-R」は「reverse ssh tunneling」を張って相手先(「中継マシン」)の2222ポートをlocalhost(「組織内のマシン」)の22に繋げている. 要方向留意
「-i」は秘密鍵のありか.
っでこれを行って「本当に有効なの?」って思うのだが、その場合は別ターミナルで中継マシンに入ってroot権限で「lsof -i」を実行すればよかろう.
っで最後に組織外のPCからアクセス. 組織外のPCってまぁ出先のカフェエリアとかとかから.
まずは、公開鍵を作ってそれを「中継マシン」「組織内のマシン」に加えておく
[saber@cc ~]$ ssh-keygen -t ed25519
[saber@cc ~]$ ls -la .ssh/
total 8
drwx------. 2 saber saber 46 Nov 5 22:25 .
drwx------. 3 saber saber 74 Nov 5 22:25 ..
-rw-------. 1 saber saber 399 Nov 5 22:25 id_ed25519
-rw-r--r--. 1 saber saber 90 Nov 5 22:25 id_ed25519.pub
[saber@cc ~]$
[saber@cc ~]$ cat .ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICTPxQL3+D3TiEFMFFn+BCOSX7Jr81QO55loLKu2PjEg saber@cc
[saber@cc ~]$
「中継マシン」
[saber@ik1-yyy-xxxxx ~]$ echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICTPxQL3+D3TiEFMFFn+BCOSX7Jr81QO55loLKu2PjEg saber@cc" >> .ssh/authorized_keys
[saber@ik1-yyy-xxxxx ~]$ cat .ssh/authorized_keys
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN/OGTsKP6kV/ZEVyWzIQOi3FbXDWhO+OvuQDebWm9V+ saber@centos7
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICTPxQL3+D3TiEFMFFn+BCOSX7Jr81QO55loLKu2PjEg saber@cc
[saber@ik1-yyy-xxxxx ~]$
「組織内のマシン」
[saber@centos7 ~]$ echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICTPxQL3+D3TiEFMFFn+BCOSX7Jr81QO55loLKu2PjEg saber@cc" >> .ssh/authorized_keys
[saber@centos7 ~]$ chmod 600 .ssh/authorized_keys
[saber@centos7 ~]$ cat .ssh/authorized_keys
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICTPxQL3+D3TiEFMFFn+BCOSX7Jr81QO55loLKu2PjEg saber@cc
[saber@centos7 ~]$
っと準備を完了させていざアクセス
[saber@cc ~]$ ip a
(略
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:8a:0a:f4 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.10/24 brd 192.168.10.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
[saber@cc ~]$
[saber@cc ~]$ ssh -i .ssh/id_ed25519 -J ik1-yyy-xxxxx.vs.sakura.ne.jp -l saber localhost -p 2222
:
[saber@centos7 ~]$ hostname
centos7
[saber@centos7 ~]$ ip a
(略
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:f6:a0:09 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.107/24 brd 192.168.0.255 scope global noprefixroute dynamic ens192
valid_lft 39068sec preferred_lft 39068sec
inet6 fe80::1acb:fbfe:aadd:c51d/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[saber@centos7 ~]$
fail2banを入れているならignoreipを定義した方がいい.
繰り返しますが、組織のポリシーに従ってください. 闇で掘るのやめましょう. Teamviewer/Anydeskもそうですが
途中途切れることがあったが、TMOUT=0を入れたら大丈夫っぽい.