動的IPでインターネット経由で常にシステムにSSH接続できるように構成するにはどうすればよいですか?


11

基本的に、sshサーバー(マシンA)とsshクライアント(マシンB)の両方がインターネットアクセス(およびいくつかの3番目のサーバー、マシンC)を持っている限り、ネットワーク構成に関係なくteamviewerのようなことができるようにしたい)、私はアクセスを得ることができます-この理由は、マシンAを動かしたり、電源に接続したり、事前に構成されたいくつかのwifiネットワークのいずれかに自動接続したりできるようにすることです(それぞれ1つずつ/異なる) 、ネットワークでポート転送などを設定せずに、マシンBからインターネット経由でログインできる

どうすればこれを達成できますか?ハンドシェイクを支援するために静的IPアドレスが設定されたサーバーに何かを設定してもかまいませんが、何かが既に存在する場合(たとえば、teamviewerの場合のように)サードパーティのサーバーも気にしません。

明確にするために編集:私は3台のマシン、ABとCを持っています

Aは、ランダムな場所で電源がオン/オフになるヘッドレスラズベリーpiであり、事前に設定されたwifiネットワークに接続します

Bは、接続したい適切なモニター、キーボードなどを備えたマシンです。

Cは静的IPアドレスを持つレンタルAWSサーバーであり、Bから確実にSSHで接続でき、BがAに接続するのに必要なものをすべてインストールできます


3台目のマシンにSSH接続できますか?
Anthon 2015

@Anthon私はそう思うので、ABとCに名前を変更し、それらの説明を追加しました。うまくいけば、
それで解決

咳no-ip.com咳
ジョシュア

1
no-ip.comは、あなたの場所の境界ファイアウォールが戻りトラフィックを許可しない場合は役に立ちません!
ボブストロ2015

sshトンネルを使っていたのはごく簡単なことです。とはいえ、彼らに起き上がることはできませんでしたautossh。何らかの理由でアップリンクがドロップした場合、常に手動で再起動する必要があります。最終的に私はOpenVPNを使って自分用に小さなVPNをセットアップしましたが、うまく機能しました。
2015

回答:


11

インターネット上にマシンCがあるので、という名前の特別なアカウントsesameを作成し、Aで、公開キーをsesameC のアカウントにコピーした公開/秘密キーを使用してアカウントを作成します。

AからCにログインできるようになりましたが、その代わりに次のようにします。

ssh -N -R 19930:localhost:22 sesame@yourserverC

(これをスリープステートメントまたは例えば10秒と組み合わせて、これをエンドレスループにラップして、WiFiダウンが原因で接続が切断された場合に接続が再確立されるようにすることができます)

マシンBから、通常はCに持っているアカウントにログインします(アカウントである必要はありませんがsesame、別のアカウントを使用しています)。Cになったら、次を使用してAにログインします。

ssh localhost -p 19930

もちろん、19930以外の番号を使用することもできます。

Aの秘密鍵がパスワードで保護されていない場合は、ssh -N -R ...から実行/etc/rc.localできます。その場合はsesame、機能が制限された別のアカウントを作成してください。これにより、マシンAが危険にさらされたり盗まれたりした場合に、サーバーCのリスクが制限されます。そのため、BからCに移動するには別のアカウントを使用することをお勧めします。

あなたは、実際のログインシェルを設定することはできませんsesame/etc/passwdする/bin/falseので、あなたは、もはや、ログイン用のアカウントを使用することができます。


このソリューションはTeamViewerの使用とは異なり、サーバーはポートを開くために使用され、ポートは直接通信するようにリダイレクトされます。BitTorrentのようなプログラムがダウンロード元のマシンを見つけた後に直接通信するのと同じように(事前にポートを開く必要はありません)。
Anthon 2015

したがって、主な違いは、この方法ではすべてのトラフィックがサーバーCを通過するのに対し、Cはリンクの確立にのみ使用され、残りの接続には使用されないことです。セキュリティに関しては良い点がありますが、最低限のログイン以外に、ゴマがCで何もできないようにするために特にすべきことはありますか?(RHELシステム)
user2813274 2015

1
@ user2813274実際、このシナリオではすべてのトラフィックがCを通過します(これにより、BitTorrentの有用性が失われます)。私は、あなたが制限することができますどのように遠くないですsesameCにアカウントが、それはあなたがそれを実行することができていることかもしれません/bin/false(sshは本当ににログインすることはありませんので)ログインシェルとして、あるいは追加して、それを制限するcommand=には、パラメータを~/.ssh/authorized_keys
Anthonの

@ user2813274自分で試していない場合:リバースプロキシを設定するための特別なアカウントがある場合は、ログインシェルをに変更することで、そのアカウントへのログインを無効にできます/bin/false
Anthon、2015

1
@ user2813274はい、試してみたところ、リバーストンネルをセットアップできました(ssh localhost -p portnumもちろん、サーバーCにアクセスするには別のアカウントが必要です)
Anthon

7

Raspberry PiにIPv6トンネル(Sixxsなど)をインストールします。これで、Piがオンラインになるたびにオンラインになる永続的な静的IPv6アドレスが得られます。Piが世界に接続されていることを確認してください。

BがIPv6ネットワークに接続されている場合は、Piに直接接続します。BがIPv6ネットワークに接続されていない場合は、Cをジャンプサーバーとして使用し、IPv4を介してCに接続してから、IPv6を介してCからPiにsshします。


ネットワークがIPV6をサポートしている場合はCも必要ないため、これが好きですが、試してみる必要があります-ファイアウォールがこれをデフォルトでブロックしている限り、何か問題はありますか?
user2813274

1
Sixxは、IPv6をトンネリングするための複数のプロトコルを提供します。Anything In Anything(AYIYA)を使用する場合は、TCPポート3874およびUDPポート5072がPiからインターネットに開いている必要があります。ホームネットワークでは、これで問題ありません。企業またはキャンパスネットワークは異なる場合があります。
garethTheRed

トンネルをインストールすることはできそうに聞こえましたが、Sixxsサービスにサインアップし、IPアドレスで返されるまで待つ必要があるようです。私が今行くつもりのルートとは思わないでください。
user2813274 2015

1

これも見てください:

使用されているテクノロジは、承認済みの回答で説明されているものと同じですが、いくつかのスクリプトを使用して物事を自動化し、ソリューションをより一般的なものにします。また、Dockerコンテナ内にすべての構成を作成するため、何かが危険にさらされた場合でもメインシステムは安全です。

ただし、AからCへの自動接続は提供されないため、手動で開始する必要があります。ソリューションを少しカスタマイズして、思い通りの結果が得られるようにすることもできます。


0

おそらく、sshやトンネリングの概念以外を使用する必要があるかもしれません。whatsappや電報などのメッセージングの概念を使用することをお勧めします。しかし、vimのようなものを使用したい場合は、sshほど良くありません。

Telegramには、特定のコマンドを受け入れて実行し、raspiに実装するように変更できるtelegram-cliクライアントがあります。

テレグラムを使用する場合は、ネットワークを簡素化し、少なくともCマシンを削減してハブを実行することができます。これは、Cサーバーがテレグラムメッセージングサーバーで代用されるためです。マシンも、必要に応じて、特定のOS用の電報クライアントをインストールできます。セキュリティ?電報メッセージは暗号化されています。誰かがあなたのraspiをddosしたいなら?彼らは最初に電報サーバーをddosします。

raspiがテレグラムサーバーに接続できる限り(raspiがインターネットに接続するだけ)、raspiがファイアウォール/プロキシ/プライベートIP /動的IPの背後にある場合でも、いつでもリモートで実行できます。

このコンセプトにより、いつでもどこでもリモートで操作できます。


ワット。それは安全ではありません、あなたはいくつかのランダムなメッセージングアプリを信頼しています、あなたはそれを機能させるためにOPがそのランダムなメッセージングアプリを変更しなければならないと言っています。これは、ランダムメッセージングアプリがvimのようなもので完全に壊れ、レイテンシがひどいことに気付くことさえありません。
さらに別のユーザー

あなたはvimのような何かにそれを使用する場合さて、あなただけのコマンドを送信するためにそれを使用する場合、私はそのOKだと思う..私はそれの良い...良いアドバイスを思ういけない..私は私の答えを編集します
Wicaksono Trihatmaja

これは私が望んでいることではないと思います。完全なシェルアクセスが必要です。Piへの依存に関する限り、これ以上のことはありません。最初に特別な設定を行う必要があるため、私は本当に心配していません。接続は断続的でランダムに変化するため、2番目に自分自身に接続することもできます
user2813274

0

リバースsshポートフォワーディングを確認する必要があると思います。簡単に言えば、最初に以下の構文を使用してAからCにsshを開始し、次にそのポートを使用してCからAにトンネルバックします。そうすると、R-Piがすでに持っているので、Aのホームファイアウォールに到達しません。トンネル。

ssh -R 2210:localhost:22 myCoolAwsSite.com

その際、セキュリティ上の問題を考慮してください。再起動後に接続が再確立されるように、いくつかのcron柔術を追加できます。


えっと…これはアンソンの答えとどう違うの?
user2813274
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.