回答:
事前に計画しておけば、OpenSSHの最近の十分なバージョンでは非常に簡単です。
初めてマスター接続を開きます。以降の接続では、既存のマスター接続を介してスレーブ接続をルーティングします。で~/.ssh/config
、自動的に行われる接続共有を設定します。
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
既存の接続と同じ(ユーザー、ポート、マシン)に対してsshセッションを開始すると、2番目のセッションが最初のセッションを介してトンネリングされます。2番目の接続の確立には、新しい認証は必要なく、非常に高速です。
/var/log/secure
および/var/log/auth.log
ログSSH接続。既存の接続に便乗するため、スレーブ接続は表示されません。sshセッションが端末を割り当てた場合(つまりssh somehost
、コマンドが提供されていない、またはssh -t
)、wtmp
その端末の表示方法に関係なく(通常)ログインします(接続を確立するために使用された方法、端末エミュレータアプリケーションなど)。
ControlPersist 600
、ソケットが自動的に削除されるまでのアイドル状態の秒単位の遅延を使用することもできます。それ以外の場合、マスター接続が終了すると自動的に終了します。これは、一連のコマンドをリモートで実行するのには適していません(たとえば、さまざまなフォルダーに対する一連のrsyncコマンド)
-S
(ソケットの指定)および-M
(マスター接続の作成)を使用することもできます。
これは、ncツールとsshトンネルを使用して簡単に実現できます。
sshセッションで~C、新しい行に入力します。次のようなssh「サービスコンソール」プロンプトが表示されます。
ssh>
入力し、ローカル前方 SSHトンネルを開くコマンド:
ssh> -L22000:targethost:22001
Forwarding port.
targethost
接続先のマシンのホスト名またはIPアドレスはどこですか。
ここで、ターゲットマシンのsshサーバーがトンネルを禁止するように構成されていないと仮定すると、目的の接続転送ssh
があります。マシンのクライアントはポート22000をリッスンし、送信されたトラフィックをの22001ポートに転送しtargethost
ます。
これは、すでに開いているsshセッションに次のコマンドを入力するのと同じくらい簡単です。
remote$ nc -l localhost 22001 | sh
これにより、sshトンネルのターゲットポートであるポート22001でリッスンするTCPサーバーが起動し、受信したデータ(おそらくシェルコマンド)をtargethost
シェルインスタンスにルーティングします。
local$ cat yourscript.sh | nc localhost 22000
これにより、スクリプトの本文がsshトンネルに送信され、最終的にのシェルで実行されtargethost
ます。端末のsshセッションでスクリプトの出力が表示されます。
また、このシナリオのsshトンネル(ステップ1.)は厳密には必要ないことに注意してください。サーバーを開いて起動し、インターネット経由で直接接続することもできます。ただし、ターゲットホストに直接到達できない場合(NATの背後など)、またはssh暗号化が必要な場合は、トンネルを使用する必要があります。
~
文字が改行の後に来る必要があるためLF ~ C
、おそらくより良いシーケンスです。
less
は、一般的なデフォルトのポケットベルである検索をサポートしているため、キーワードを知っていればスクロールを節約できますman ssh
/ESCAPE
。