私のセットアップはUbuntuラップトップとUbuntuサーバーです。
ローカルのラップトップに、特定のWebサービスにアクセスする必要のあるプログラムがあります(それを http://someserver.com/someservice12 と呼びましょう)。現在、このサービスには、サーバーのIPからのアクセスのみを許可するファイアウォールがあります。
ラップトップとサーバーの間で使用できるSSHトンネルのタイプはありますか?ラップトップのpythonスクリプトがリクエストを送信するときに http://someserver.com/someservice12 そのサービスは私のサーバーのIPからのリクエストを認識しますか?
私はそれが次のように見えることを知っています:
ssh -N -R 80:localhost:80 user@myserver
しかし、正確にはわかりません。
必要なのは、逆トンネルではなく通常のトンネルです。
ssh -L 80:someserver.com:80 user@myserver
これにより、ラップトップ(localhost)のポート80にリスニングソケットが作成され、myserverのSSHサーバーを介してsomeserver.comにアクセスします。
私は通常、トンネルをオプション-CfNと組み合わせます。-Cは圧縮を有効にし(少しスピードアップします)、-fは認証が完了するとSSHをバックグラウンドに送信します(したがって、必要に応じてパスワードを入力する機会があります) 、-Nは、SSHサーバーでコマンドが実行されないようにします(サーバーにコマンドを送信するために使用できると仮定してSSHをバックグラウンドで実行することは実際には安全ではありません。少し健全なパラノイア/良い習慣です)。
ラップトップとmyserverの間に非常に安全な接続を確立する必要がない場合は、暗号を-cblowfishを使用したblowfishやarcfour128(さらに高速)などの高速なものに変更することもできます。
だから私が使うのはこれです:
ssh -CfNc arcfour128 -L 80:someserver.com:80 user@myserver
これにより、サーバーに開いているコマンドプロンプトを残す代わりに、バックグラウンドに直接入る、すてきで高速なトンネルが得られます。
バックグラウンドに送信する場合、トンネルを解除するときは、最初にps -ef | grep ssh
のような操作を実行してプロセスIDを見つけ、正しいプロセスIDを強制終了する必要があることに注意してください。
Sshが提供するSOCKSプロキシを使用できます。経由で接続
ssh -D 9999 user@myserver
次に、このSOCKSプロキシをpythonスクリプトで使用できます。 rllib2でSOCKS 4/5プロキシを使用するにはどうすればよいですか :
import socks
import socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9999)
socket.socket = socks.socksocket
(このコードをスクリプトの先頭に配置します)
私の提案は、以下を使用することです。
ssh -L 8080:localhost:80 user @ server
このように、プログラムを_http://localhost:8080/
_に接続することにより、ポート80が特権ポートであることに反することはありません。また、圧縮には_-C
_、バックグラウンドには_-f
_、端末を開かない場合は_-N
_のオプションを使用します。
したがって、_ssh -CfN -L 8080:localhost:80 user@server
_は
コメントのフォローアップとして、 tutorialspoint.com から引用させてください。
単純なクライアント:
_import socket # Import socket module s = socket.socket() # Create a socket object Host = socket.gethostname() # Get local machine name port = 8080 # Reserve a port for your service. s.connect((Host, port)) s.close
_
Pythonのネットワーク接続手段を使用しているので、コードにconnect()
ステートメントがあると想定しています。
(詳細については、リンクをたどってください。);-)