Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SSHで快適リモートワーク

 SSHで快適リモートワーク

koedoyoshida

October 25, 2023
Tweet

More Decks by koedoyoshida

Other Decks in Technology

Transcript

  1. 内容 • SSH踏み台設定 • 今まで:最強のSSH踏み台設定 • これから:-J • 温故知新:ワイルドカードマッチ •

    温故知新:ワイルドカードマッチ • 自宅、クラウドサーバ活用:autossh • systemd化 • Windowsでの利用
  2. 踏み台経由のSSHアクセス • 踏み台(gateway、 bastion、step)経由アクセス • sshサーバを順々にアクセスしてもコンソールでア クセスはできますが... • 直接アクセスできると 踏み台

    サーバ 配下のPC(非公 開) sshd sshd/ rdpd/vncd etc • 直接アクセスできると • 手間の削減 • ポートフォワード含めセキュリティを高めた上で、さら に便利に! • 秘密鍵を踏み台に置かなくて済む 作業PC(非公開) ssh client rdp/vnc client
  3. 最強のSSH踏み台設定(以前の方法) .ssh/config: # https://qiita.com/kawaz/items/a0151d3aa2b6f9c4b3b8 Host */* ProxyCommand ssh -W "$(basename

    "%h")":%p "$(dirname "%h")" #ホスト鍵無条件に受け入れて、ファイルを更新 StrictHostKeyChecking no StrictHostKeyChecking no Host *+* ProxyCommand ssh -W "$(sed -E 's/.*¥+//'<<<"%h")":%p "$(sed -E 's/¥+[^¥+]*//'<<<"%h")" StrictHostKeyChecking no # ssh hoge.com/192.168.x.x #gateway+gatewayから到達できるサーバ # ssh hoge.com+192.168.x.x #gateway/gatewayから到達できるサーバ
  4. 温故知新:ワイルドカードマッチ .ssh/config: Host desk01* HostName 192.168.x.x Host desk02* HostName 192.168.x.x

    ProxyCommand=ssh -W %h:%p sshgateway Match originalhost *-ofwd Match originalhost *-ofwd dynamicForward 8080 LocalForward 65422 localhost:22 $ ssh desk01-ofwd #直接接続 $ ssh desk02-ofwd #外部接続、shellscript 等で順番にtryする等でより省力化、高度化 詳細は実用SSH 第二版 P288 多重マッチ
  5. リバースポートフォワード • 通常のポートフォワード(-L) • (リモート)サーバのポートを(ローカル)マシンに(sshを転送路として使 用して)持ってくる • 例えば、サーバのxrdpやVNCポート(外に公開していない)をローカル マシンに持ってきて、使用する マシンに持ってきて、使用する

    • リバースポートフォワード(-R) • (ローカル)マシンのポートを(リモート)サーバに持って行く • 例えば、WindowsPCのVNCやリモートデスクトップポートをサーバに 持って行って、サーバに接続してローカルマシンを操作する
  6. そんなあなたにautossh • autosshとは • sshクライアントを起動/監視するプログラム • https://packages.debian.org/buster/autossh • リモートのsshサーバに(リバース: -R)ポートフォワード等が可能

    • 後述のデフォルト設定はローカルフォワード(-L)なので書き換える • リバースポートフォワードでクラウドサーバをssh踏み台に! クラウドサーバ (グローバルIP) 自宅PC port待受 sshd/rdpd etcへ転送 自宅PC(非公開) 作業PC(非公開) sshd sshd/ rdpd/vncd etc autossh ssh client rdp/vnc client • リバースポートフォワードでクラウドサーバをssh踏み台に! • 使用例 • 実家PC(autossh)から自宅やクラウド上のサーバ(sshd)に接続することによりクラウ ド上実家PCのsshportへ転送するportを作ることができる • sshのみ公開したクラウドサーバを準備できれば、それ以外はNAT下でもOK • セキュリティ • sshdのデフォルトはサーバのlocalloopbackのみ許可(GatewayPorts=no)なので使用 時はクラウドサーバに一旦ssh clientで接続して再度ローカルに接続 (つまり踏み台) • デフォルト(GatewayPorts=no)ではパブリック(0.0.0.0)には公開されない • 御社(ご自宅)のセキュリティ要件はご確認ください! • At your own risk. client
  7. さらにautosshをsystemdでサービス化し てssh接続を安定化 • 自宅PCの(再)起動時に自動でautosshを起動 • https://remoteroom.jp/diary/2019-07-18/ • https://gist.github.com/ttimasdf/ef739670ac5d627981c5695 adf4c8f98 adf4c8f98

    • 要両サーバのroot • 相互にssh専用ユーザを作成してポートフォワード専用にする • systemd設定 • autosshの死亡時に自動で再開 • 安定性向上!
  8. 構成 • NAT下にある自宅PC • sshdが動いていること(Cygwin等も可) • sshで自宅サーバに接続できること • rootを持っていること(Windowsでも可) クラウドサーバ

    (グローバルIP) 実家PC sshdport へ転送 自宅PC(非公開) 作業PC(非公開) sshd sshd autossh ssh client rootを持っていること(Windowsでも可) • インターネットからsshアクセス出来る自宅サーバやクラウド 上のサーバ • sshdが動いていること • rootを持っていること • クラウドサーバにアクセス出来る作業用PC • sshクライアントが動いていること
  9. 手順(全てLinuxの場合) • systemdひな形取得 • curl -sSL https://gist.githubusercontent.com/ttimasdf/ef739670ac5d627981c5695adf4c8f98/raw/autossh@host1 | ¥ •

    sudo tee /etc/default/autossh@example • curl -sSL https://gist.githubusercontent.com/ttimasdf/ef739670ac5d627981c5695adf4c8f98/raw/autossh@.service | ¥ • sudo tee /etc/systemd/system/autossh@.service • 専用ユーザ作成(クラウドサーバ、実家PC両方)、公開鍵作成、ssh接続 • sudo useradd -g nogroup -s /bin/false -m tunnel • sudo -u tunnel mkdir -p ~tunnel/.ssh • sudo -u tunnel nano ~tunnel/.ssh/config • sudo -u tunnel ssh remote.example.com #クラウドサーバ クラウドサーバ (グローバルIP) 自宅PC 自宅PC(非公開) sshd sshd autossh -R • sudo -u tunnel ssh remote.example.com #クラウドサーバ • (設定ファイル名変更:オプション) • cp /etc/default/autossh@example /etc/default/autossh@hoge • 設定変更 • sudo nano /etc/default/autossh@example • /etc/default/autossh@example内の次の2行を編集する • TARGET_HOST=remote.example.com • 接続サーバ(自宅サーバ) • FORWARDS=-R 10022:127.0.0.1:22 • -Rオプション:リバースポートフォワード 、10022(任意:クラウドサーバ側の空ポート番号)、22(自宅PCでの既存sshポート番号) • 接続 • sudo systemctl start autossh@example.service • 永続化 • sudo systemctl enable autossh@example.service 自宅PC sshdport へ転送 作業PC(非公開) sshd ssh client -L
  10. 手順(自宅Windowsの場合) • クラウドサーバ上にsshd,ユーザ準備 • 自宅WinPCにssh/autossh(Cygwin)を導入 • パッケージ有り • Autosshでクラウドサーバ上にリモートデスクトップポートを リバースフォワード(-R)

    • 同サービス化して自動起動 クラウドサーバ (グローバルIP) 自宅PC sshdport へ転送 自宅Win(非公開) 作業PC(非公開) sshd リモート デスクトップ サービス Cygwin autossh ssh client -R -L • 同サービス化して自動起動 • Cygrunsrv –I AutoSSH –p /usr/bin/autossh –a “-M 20000 -R localaddress:port:serveraddress:port user@ssh.host.name” -e AUTOSSH_NTSERVICE=yes • 作業PCからssh接続でリモートデスクトップをポートフォワー ド(-L) • リモートデスクトップでローカルポート接続で実家WinPCに接 続 リモート デスクトップ -L
  11. 参考URL • 参考URL • 最強のSSH踏み台設定 • https://qiita.com/kawaz/items/a0151d3aa2b6f9c4b3b8 • autossh&systemd •

    autossh&systemd • https://remoteroom.jp/diary/2019-07-18/ • https://gist.github.com/ttimasdf/ef739670ac5d627981c5695adf4c8f 98 • Creating persistent SSH tunnels in Windows using autossh • https://blog.dhampir.no/content/creating-persistent-ssh-tunnels- in-windows-using-autossh