私のDebianボックスの1つにGUIがありません。接続方法コマンドライン経由外部(AnyDesk、Teamviewerなど)から?
オフィスネットワーク内にいる間は、SCPとSSHを使用してこのマシンにアクセスできます。しかし、どうすれば自宅からアクセスできますか?ネットワークプロバイダーがルーターのWANポート)にパブリックIPを割り当てていないため、ダイナミックDNS(DDNSまたはDynDNS)は私のセットアップには適用できません。
リバースSSHはあなたの友達です。これを機能させるには、SSHサーバーが必要です。これには2つのアプローチを紹介します。最初のアプローチは、自宅のマシンからSSHサーバーを開いて実行できることを前提としています。自宅のPCが常にオンラインである必要がないように、1時間ごとに自動的に再接続を試みる方法を提供します。これは不可能または困難な場合があるため、より簡単で安全なソリューションも追加します。ただし、LinuxVPSが必要です。彼らは通常わずか2ドル/月っぽいです。
Debianサーバーでの準備:
cron
がインストールされて実行されていることを前提としています。 /etc/cron.hourly
に次の内容の新しいファイルを作成します:(ファイルをchmod +x
することを忘れないでください!)
#!/bin/bash
cstate=$(netstat -na | grep "tcp" | grep "<IP-of-home-machine>:22" | tr -s " " | cut -d " " -f 6 | head -n 1)
cdate=$(date "+%Y-%m-%d %H:%M:%S")
if [[ $cstate == "ESTABLISHED" ]] || [[ $cstate == "TIME_WAIT" ]]
then
echo "[$cdate] SSH connection up. ($cstate)" >> /var/log/check-ssh-relay.log
else
echo "[$cdate] SSH connection broken. ($cstate) Reconnecting..." >> /var/log/check-ssh-relay.log
ssh -N -f -R 12122:localhost:22 <username>@<IP-of-home-machine>
fi
これにより、接続が確立されているかどうかが1時間ごとにチェックされ、確立されていない場合は再接続が試行されます。自宅のPCの電源が常にオンになっているとは限らない場合に便利です。ログ情報を/var/log/check-ssh-relay.log
に書き込みます。認証はSSHキーを介して行われるため、事前に適切に設定されていることを確認してください。
自宅のコンピューター:
Openssh-serverが適切にセットアップされていると仮定すると、今必要なのは次のことだけです。
$ ssh <server-username>@localhost -p 12122
SSH接続を作成します。 SCP、SFTPおよび共同。もちろん動作します。
私はこのソリューションを個人的に使用しています。主な理由は、自宅に静的IPがないためです。
Debianサーバーでの準備:
<IP-of-home-machine>
の代わりにここでVPSのIPを使用することを除いて、ソリューション1とまったく同じです。
VPSでの準備:
ここで行う必要があるのは、rootユーザーとして次のコマンドを実行することだけです。
$ ssh -g -f -N -L 0.0.0.0:13122:localhost:12122 root@localhost
ここで-g
は、このポートフォワードのグローバルインバウンド接続を許可するために重要です。
自宅のPC(または文字通りどこでも):
ポート13122
(上記で指定)を使用して、VPSに接続するだけです。
$ ssh <username>@<VPS-IP> -p 13122
あなたの問題は、あなたが制御していないNATの後ろに座っているため、ポート転送を設定できない可能性があります。
これに対する最も簡単な解決策は、リバーストンネリングです。制御するマシンから制御するマシンへのssh接続を設定します(このマシンはssh経由でアクセスできる必要があります)
https://unix.stackexchange.com/questions/46235/how-does-reverse-ssh-tunneling-work を参照してください
オフィスに OpenVPN サーバーをセットアップし(ネットワークからパブリックWANにポートを転送できると仮定)、非GUIボックスをそれに接続させることができます(Baldrickkの答えのように;リバーストンネリング) 、そしてサーバーは、そのボックスで実行されている他のサービスとともに、非GUIボックスにSSHで接続できるはずです。
このようなアプローチにはいくつかの問題があります。その1つは、GUI以外のボックスのクライアントがタイムアウトした場合、ローカル(同じネットワーク上)にSSHで接続し、クライアントを再起動しないと接続が不可能になることです。
GUIがない場合、必要なのはリモートコンソールだけです。これは通常、非常に優れたセキュリティとssh
(リモートファイルコピー)などの付加価値サービスを組み合わせたscp
で実現されます。