ホームコンピューターへのSSH


21

SSHとVNCを使用して学校からアクセスしたい自宅に複数のマシンがあります。そのために、静的IPを提供しました。

  • 192.168.1.50:Windows
  • 192.168.1.51:Ubuntu
  • 192.168.1.52:Raspberry Pi / Raspbian

SSHはポート22を使用することがわかっているため、このポートをルーターの192.168.1.51:22に転送できますが、この方法ではRaspberry PiにSSHで接続できません。両方のマシンにアクセスできるように設定する方法はありますか?


10
異なるsshポートを使用できます。Windowsがどれほど難しいかはわかりませんが、Linuxでは、スターダード以外のポートに簡単に変更でき ます。この方法では、ポート22をマシンに勝ち(そこに変更なし)、他のポート(非標準)をRaspberryPiに転送できます。
ビストコ

2
@Melebius、それは古いですが、それでも良い読書です、私にとって重要な部分は「私がやろうとした基本的な議論:セキュリティによる隠蔽をしないでください。」、これは必要性とそれを簡単に解決することです。つまり、多分彼はubuntuやpiポートを変更する必要はなく、22個のマシンポートごとに異なるルーターポートを転送するだけです。
ビストコ

1
@bistoco同意します。ただし、OPはSSHアクセスを外部に公開しようとしているため、このような場合は常にセキュリティを考慮する必要があります。また、コンピューターに異なるポートを設定しても、ルーターで異なるポート(=ポート転送)を有効にする必要があるため、OPの問題は解決しません。
メレビウス

6
@Melebius Offトピックですが、自動化されたボットが私のサーバーを24時間365日ノックしないため、22は使用しません。実際の攻撃者(または適切に作成されたスクリプト)を排除しませんが、ログエントリの数を減らします。
カズウルフ

4
それらの1つ(パブリックにアクセス可能なもの)に接続し、ローカルアドレスを使用してこの1つから他の1つに接続することができます。
tkausl

回答:


32

IPv6を使用している場合は、ポート転送も必要ありません!永続的なIPv6アドレスを取得し(MACアドレスに基づいているため、ISPがIPv6の仕組みを知らない限り同じままであることが保証されます)、これを使用してトンネリングします。IPv6アドレスは公開されており、ローカルNATを経由せずにアクセスするには、ポート転送をどこでも有効にする必要はありません。それは「うまくいく」でしょう。

ただし、IPv6はまだグローバルにサポートされていないため、これを行うにはホームインターネット接続とリモートインターネット接続の両方で完全に機能するIPv6が必要です。

ただし、ほとんどの人がIPv4のみを使用している場合は、まだ方法があります!一部のルーターでは、次のように特定の送信元ポートを特定の宛先ポートに転送できます。

ここに画像の説明を入力してください

この例では、ポート22はマシンsheepdogに直接渡されますが、ポートは292ポート22on に転送されcoyoteます。

最後に、ルーターにこの機能がない場合は、ポートを変更することができます。SSHはポートでの実行に限定されないためです22。必要なもの(使用されていないもの)に設定できます。

/etc/ssh/sshd_config(あなたがそう、編集へのルートが必要sudo nano /etc/ssh/sshd_config)、ファイルの先頭に行があります:

# What ports, IPs and protocols we listen for
Port 22

これを必要なものに変更します。

# What ports, IPs and protocols we listen for
Port 2992

でSSHサーバーを再起動sudo service ssh restartし、ルーターのポートを転送します。


ただし、このユースケースでは、SSHトンネルが適切かどうかを検討します。おそらく、ホームネットワークに専用のVPNサーバーをセットアップする必要がありますか?これにより、VPNに必要な適切なセキュリティ資格情報があれば、どこからでもホームネットワーク全体にアクセスできます。さらに、VPNのオーバーヘッドはわずかに少なくなります。通常、1台のマシンに対して1つのポートのみを転送する必要があります。


2
ISPがIPv6をサポートしていない場合、IPv6トンネルブローカーを使用してIPv6アドレスを取得できます。
アンドレボリー

1
「この機能」とは、ポートを別のポートに転送することを意味しますか?
劉思源

@LiuSiyuanうん。私はそれが奇妙であることを知っていますが、それを処理できないいくつかのルーターを見てきました。私の古いISP提供のルーターは試してさえいませんでした。
カズウルフ

そのIPv6の部分はまったく理解できませんでした。IPv6アドレスを提供するすべてのISPがネットワーク上の各デバイスに(一貫した)異なるアドレスを提供すると仮定しますか?
jjmontes

1
@jjmontes ISPが有能である場合、完全な/ 64(またはそれより少ないかもしれませんが、すべてのマシンに1つを割り当てるのに十分です)
Kaz Wolfe

19

この問題を解決する簡単な方法は、ルーターのさまざまなポートをマシンのポート22にマップすることです。たとえば、ルーターで次の設定を行うことができます(ルーターにIPがある場合1.2.3.4

1. 1.2.3.4:22   --> ubuntu:22
2. 1.2.3.4:8888 --> raspberrypi:22
3. 1.2.3.4:9999 --> windows:22 (or some other port)

次に、sshを使用するときに、使用するポートを指定します。

$ ssh <username>@<router ip> -p <your port>

これで、すべてのマシンに接続できるはずです。


11

コンピューターの1つが常に稼働していることがわかっている場合は、それをsshプロキシーとして使用することもできます。

外部IPアドレス(つまり、myhome.dyndns.comなど)にドメイン名を設定しているとします。1台のコンピューターに接続するだけです(ラズベリーが常に起動している場合、ルーターからポートを転送します)それ)、あなたのssh接続は次のようになります:

学校->(ここではルーター、透明)->ラズベリー-> ubuntuまたはwindows

次に、学校の〜/ .ssh / configに次の行を追加します。

Host ubuntu 192.168.1.51
    Hostname ubuntu (change to match your setup)
    User myraspberryuser  (change it ;-) )
    IdentityFile ~/.ssh/id_rsa   (The path to your private key, on the school computer, better on an usb key if public computer)
    ForwardAgent yes
    RequestTTY yes
    ProxyCommand ssh -W %h:%p %r@myhome.dyndns.com

次に接続するには:

ssh-add ~/.ssh/id_rsa # to do only once per session
ssh myuser@ubuntu (login without password)

ここから、ssh ubuntuと入力すると、コンピューターは最初にラズベリーに接続し、次にUbuntuコンピューターへのsshセッションを開始します。

転送するポートに関係なく、/ etc / sshd.confのパスワードを無効にして、sshキーによるログインのみを許可することをお勧めします。このように、パラメータ 'ForwardAgent'を使用してキーをraspberryおよびubuntuにセットアップすると、キーをロック解除するだけでよく、接続にパスワードは必要ありません。このように、ボットがsshにログインしようとしても、パスワードログオンを許可しないため、ボットは決してログインできません。

ボーナス、これはscpでも機能します。scpfoo ubuntu:/ tmp / fooは、追加のパラメーターなしで同じセットアップを使用します。ボーナス2、このセットアップは自宅で変更する必要はありません。明日、あなたと別のコンピューターがssh configのコードをコピー/ペーストし、ホストとIPを変更するだけです、つまり、ルーターで新しいポートを開く必要はありません


マシンをSSHの中間として使用することの欠点はありますか?Raspberry Piを使用してネットワーク内の他のコンピューターに接続するとします。そのパフォーマンスはタスクに影響しますか?
アクールシュヌ

1
はい、ラズベリーはサーバーおよびクライアントとして機能する必要があるため、スループットを制限できます。十分に自信があれば、sshトンネルでも同じ結果を得ることができます。この方法では、ラズベリーはサーバーとしてのみ機能しますが、学校のPCは2つのクライアントを実行する必要があります。
potens

4

私はこれを実行します-rpiをそのままにして、常にルーターに直接接続し(実行するのが最も安価なため)、単にsshを実行し、それから他のユーザーにバウンスします-それはあまり注意を必要としません。

VNC / RDPでsshパイプを介してGUIを実行したり、ちょっとした楽しみをしたり、デスクトップコンピューターのサーバーをプライベートに保ちながらブラウズできるポートを転送したりすることもできます。

この答えを追加した理由は、いくつかの提案をすることです。

1)22以外のポートを使用します。PIには22のままにしておきますが、ルーターの着信ポートを10,000を超えるものに変更します。そうしないと、1日に数十から数百の攻撃を受けます。 「エクスプロイトが見つかった2番目にSSHホストを実行していることがわかっているのはあなたです。

2)ユーザー名/パスワードの代わりに証明書を使用する-ユーザー名/パスワードのログインを完全に無効にします。

3)IPアドレスを変更できる場合は、dyndnsタイプのサービスを使用してDNSホストハムを取得します(noipを使用します。無料で、IPアドレスを更新するLinuxクライアントをサポートします。パイ今)。これを無料で提供している会社はまだいくつかあります。

4)pi(またはsshを使用するもの)を最新の状態に保ちます(sudo apt-get update)。私はsshが今ではかなりよく吟味されていると信じていますが、httpsのことも信じていました...


3

これが回答としてではなくコメントとしてより適しているかどうか疑っていましたが、とにかくここに投稿します。

これを行う前に考えるべきいくつかのこと:

  1. システムをインターネットに公開するので、パッチが適切に適用され、セキュリティ構成が強化されていることを確認してください(たとえば、rootログインを許可せず、パスワードの代わりにpubkeyを使用します)。
  2. パブリックIP(whatismyip.comを参照)は変更される可能性がありますが、ISPによっては毎日変更される場合もほとんどない場合もあります。これは、パブリックIPを把握する方法を見つける必要があることを意味します。自宅のネットワークからwhatismyip.comに毎日アクセスしたり、アプリを作成したり、ダイナミックDNS(DynDNS)を使用して、変化するパブリックIPを静的ドメイン名にマッピングしたりできます。
  3. IPv6を使用してIPv4およびNATに関連するすべての手間をバイパスする場合は、デバイス、ルーター、ISPなどもIPv6と通信する必要があります。ISPがIPv6をサポートしていない場合に役立つサービスがいくつかありますが、デバイスとルーターはいずれにしてもIPv6を使用する必要があります。
  4. インターネットに開くポートとデバイスが多いほど、攻撃領域が大きくなります。ネットワークでジャンプボックスを使用し、インターネットからそのデバイスへのSSHアクセスのみを許可することをお勧めします。ジャンプボックスは基本的に、ルーターを介してインターネットにポートフォワードする非常に強化されたシステムです。そのボックスに接続すると、それを介して内部ネットワークにSSH接続できるようになります。基本的に、ジャンプボックスは別のRaspberry Piになります。専用のデバイスを使用して、可能な限りそれを強化できるようにすることをお勧めします(とりわけ、できるだけ少ないサービスを実行することで)。
  5. (4a)ジャンプボックスをSSHで接続する代わりに、VPNサーバーを設定して、学校のデバイスからホームネットワークを閲覧できるようにすることもできます(発信VPN接続が許可されている場合)。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.