シェル スクリプトを使用して既存の SSH 接続を変更したいと思います。既存のスクリプトをリモートで実行する場合、トンネル化される新しいポートを開くようにしたいと思います。
インタラクティブにこれを行うには、次の操作を実行します。
ubuntu@6c1a17c3864c:~$ ~C
ssh> -R 9000:localhost:9000
私が言うよりずっと明確に言えば、https://unix.stackexchange.com/questions/33557/すでに確立されたSSHチャネルの使用。
理想的には、シェル スクリプトを使用してエスケープ文字を介して対話し、既存の接続を調整したいと思います。
私は次のようなものを見てきました:
#!/bin/bash
# Attempt 1
echo -n '\r\f \~\~C -L 9000:localhost:9000'
# Attempt 2
echo -e '\r\f\~\C -R 9000:localhost:9000'
printf '\~\C -L 9000:localhost:9000'
netstat -taln
他にもいくつか組み合わせがあります。
echo と printf は両方ともシェルの組み込み関数であることを確認しました。
私はBash 4.3.11 x86_64-pc-linux-gnuを使用しています。
答え1
これを実現するにはスクリプトが必要ですexpect
。問題は、これらのエスケープ文字が bash によって評価されるのではなく、ローカルの ssh クライアントによって評価されることです。次の例でこの問題を解決できます。
#!/usr/bin/expect -f
set timeout 10
exp_internal 1
spawn telnet $argv
expect "login:"
send "mylogin\n"
expect "Password:"
send "mypass\n"
expect '~$'
# Send some commands
close