web-dev-qa-db-ja.com

httpまたはhttpsでsshを使用する方法

会社のファイアウォールの背後にLinux Fedora21クライアントラップトップがあり(httpおよびhttpsポートは通過できますが、ssh 22は通過できません)、自宅に自分のルーターの背後にLinux Fedora21サーバーがあります。ホームサーバーのパブリックIPアドレスを指定すると、httpsによるブラウジングが機能します(ホームルーターを構成したため)

Http/sポート経由でホームサーバーにssh(リモートシェル)することはできますか?

corkscrewというツールを見ました。それは役に立ちますか?

opensshdおよびhttpdはホームサーバーで実行されます。他に何が設定を必要としますか?

45
MMM

何が可能かは、ファイアウォールが許可するものによって異なります。

ファイアウォールがポート443で任意のトラフィックを許可する場合

一部のファイアウォールは、単純な方法でポート443を許可します。その場合、ホームサーバーに到達する最も簡単な方法は、ポート443でSSH接続をリッスンすることです。マシンがインターネットに直接接続されている場合は、単にPort 443/etc/ssh/sshd_configまたは/etc/sshd_configに、Port 22と書かれた行のすぐ下に追加します。マシンが着信接続をリダイレクトするルーター/ファイアウォールの背後にある場合、着信接続をポート443からサーバーのポート22にリダイレクトします。

iptables -t nat -I PREROUTING -p tcp -i wan0 --dport 443 -j DNAT --to-destination 10.1.2.3:22

ここで、wan0はルーターのWAN=インターフェースであり、10.1.2.3はホームネットワーク上のサーバーのIPアドレスです。

ホームサーバーがポート443でHTTPS接続とSSH接続の両方をリッスンすることを許可する場合、それは可能です— SSHとHTTPSトラフィックは簡単に区別できます(SSHではサーバーが最初に通信し、HTTPとHTTPSではクライアントが通信します最初)。 http://blog.stalkr.net/2012/02/sshhttps-multiplexing-with-sshttp.html および http://wrouesnel.github.io/articles/Setting%を参照してください20up%20sshttp /sshttp でこれを設定する方法のチュートリアル、および Webサーバー(nginx)がこれらのポートで実行されているときに、ポート80または443でSSHを使用する =

CONNECTトンネリングを許可するWebプロキシがある場合

一部のファイアウォールは、すべての発信接続をブロックしますが、プロキシを介したWebの閲覧を許可します。これにより、 HTTP CONNECT メソッドがファイアウォールの穴を効果的に突き抜けます。 CONNECTメソッドは特定のポートに制限されている可能性があるため、上記のように、これをポート443でのリスニングと組み合わせる必要がある場合があります。

SSHをプロキシ経由で実行するには、 corkscrew のようなツールを使用できます。 Webプロキシが~/.ssh/configの場合は、http://web-proxy.work.example.com:3128に以下のようなProxyCommand行を追加します。

Host home
HostName mmm.dyndns.example.net
ProxyCommand corkscrew web-proxy.work.example.com 3128 %h %p

SSHをHTTP(S)でラップする

一部のファイアウォールは、ポート443でも、SSHトラフィックを許可しません。これらに対処するには、ファイアウォールが通過するものにSSHを偽装またはトンネルする必要があります。 proxytunnel を使用してこれを行うチュートリアルについては、 http://dag.wiee.rs/howto/ssh-http-tunneling/ を参照してください。

同じポート443でHTTPSサーバーとSSHdサーバーの両方を実行する場合は、 sslh を使用できます。

2
teknopaul

別の方法を試すことができます。サーバーをsshできるWebサーバーをセットアップします。

https://github.com/huashengdun/webssh

2
gaozhidf