設定された SSH チャネルの使用

設定された SSH チャネルの使用

2台のコンピュータ間でSSH接続を確立しました。

別のSSHセッションを開始せずにすでに開いている接続を使用して、ローカルコンピュータで実行されているシェルスクリプトからリモートコンピュータにコマンドを送信する方法はありますか?

答え1

あらかじめ計画を立てればとても簡単です。

初めて基本接続を開きます。後続の接続の場合、スレーブ接続は既存のマスター接続を介してルーティングされます。あなたの~/.ssh/config、接続共有設定が自動的に行われます。

ControlMaster auto
ControlPath ~/.ssh/control:%C

既存の接続と同じ接続(ユーザー、ポート、コンピュータ)でSSHセッションを開始すると、2番目のセッションは最初のセッションを介してトンネルされます。 2番目の接続を確立するために新しい認証は必要なく、非常に高速です。

ControlPersist 600に入れる.ssh/configと、トンネルは使用を中止しても10分(600秒)開いたままになります。つまり、最初のセッションを実行し続ける必要はありません。連続セッション10分以上一時停止。

答え2

使用すると簡単に達成できます。CNCツールとSSHトンネル。

1. SSHトンネルを開く

SSHセッションで~C新しい行を入力します。次のSSH「サービスコンソール」プロンプトが表示されます。

ssh> 

入力する地域配信SSHトンネルを開くコマンド:

ssh> -L22000:targethost:22001
Forwarding port.

targethost接続するコンピュータのホスト名またはIPアドレスはどこにありますか?

これで、ターゲットマシンのSSHサーバーがトンネリングを無効にするように構成されていないと仮定すると、必要な接続転送が行われます。sshマシンのクライアントはポート22000でリッスンし、そのマシンに送信されたすべてのトラフィックをポート22001に転送しますtargethost

2. リモートシステムで Web サーバーを起動します。

これは、すでに開いているSSHセッションに次のコマンドを入力するのと同じくらい簡単です。

remote$ nc -l localhost 22001 | sh

これにより、ポート22001(sshトンネルの宛先ポート)でリッスンしているTCPサーバーが起動し、受信したデータ(おそらくシェルコマンド)がシェルインスタンスにルーティングtargethostされます。

3. トンネル経由でスクリプトを送信する

local$ cat yourscript.sh | nc localhost 22000

これにより、スクリプト本文がsshトンネルに送信され、最終的にtargethostsshセッションを介して端末にスクリプト出力が表示されます。


また、この場合、SSHトンネル(ステップ1)は必ずしも必要ではなく、サーバーを開いてインターネット経由で直接接続することもできることを指摘したいと思います。ただし、ターゲットホストに直接接続できない場合(NATの背後など)、SSH暗号化が必要な場合はトンネルが必要です。

答え3

動作するのに少し時間がかかりました。参考ここ完全な例と説明を見るには。

つまり、次のものが必要です。

  1. SSH セッションに関する情報を保存するための SSH 構成ファイルを作成します。

    remote=your_ip_address
    echo "HostName $remote" > ssh_config
    echo "User root" >> ssh_config
    echo "ControlMaster auto" >> ssh_config
    echo "ControlPath ~/.ssh/%C" >> ssh_config
    master_ssh='ssh -F ssh_config'
    
  2. メインセッションの開始

    $master_ssh -MNf $remote
    
  3. 再同期の実行

    rsync -e "$master_ssh" $opts $remote:/etc/some_file1  local_directory/
    rsync -e "$master_ssh" $opts $remote:/etc/some_file2  local_directory/
    rsync -e "$master_ssh" $opts $remote:/etc/some_file3  local_directory/
    
  4. 基本セッションを閉じる

    $master_ssh -O exit $remote
    

関連情報