一般的に、私はリモートコンピュータでオーディオをリアルタイムで聞くことができます:
ssh me@gate rec -t mp3 - | play -
例えばgate
という名前のコンピューターで、コマンドrec
(またはsox
)を実行すると、オーディオストリームがネットワーク経由で転送されるため、play
(またはsox
)コマンドを使用してリアルタイムで再生できます。
これは問題なく機能します。特に、ノートブックからgate
にパスワードなしでアクセスできるためです(authorized_keys & authorized_keys2
を使用)。
しかし、私のトポロジーは次のとおりです。
+----+ internet +------+ lan +----------+
| my | ----------> | gate | -----> | internal |
+----+ +------+ +----------+
rec
compでinternal
を実行する必要があり、stdout
をplay
コンピューターのmy
コマンドにパイプする必要があります。
したがって、ssh
sをカスケード(ネスト)すると、次のようになります。
ssh -t me@gate ssh me@internal rec -t mp3 -
(ssh
の-t
に注意してください)
gate
はパスワードなしでアクセスされますgate
で、2番目の(ネストされた)ssh
が実行されますinternal
は私にパスワードを要求します(-t
)internal
はrec
コマンドを正しく開始します残念ながら、これはplay
にパイプしようとすると機能しません。この
ssh -t me@gate ssh me@internal rec -t mp3 - | play -
Password:
文字列がリダイレクトされ(たとえば、パスワードの入力を求められなかった)、play
が混乱したため、機能しません。
me@gate
-> me@internal
の間にパスワードなしのアクセスを設定すると、おそらく問題は解決する可能性がありますが、私はしたくないこれ-internal
にパスワードを手動で入力したいcomp。
これを解決する方法はありますか?
internal
は標準の22
ポートでリッスンしていると思います。
最初にトンネルを構築します。
ssh -N -L localhost:2222:internal:22 me@gate
# you can put it to background with &
次に、トンネルを介して接続します。この接続は最終的にinternal
になります。
ssh -p 2222 me@localhost rec -t mp3 - | play -
パイプが使用されているにもかかわらず、internal
へのパスワードの入力を求められるはずです。
ssh -L …
は 別の質問に対する私の答え で説明されています。
ラップトップがinternal
に直接アクセスできる場合、パスワードプロンプトが邪魔にならないのではないでしょうか。
その場合は、ProxyCommand
構成オプションを試してみてください。
このようなものを~/.ssh/config
に入れてください
Host internal-via-gate
User me
Hostname internal
Port 22
ProxyCommand ssh gate nc %h %p
これにより、直接接続しているかのように、ssh internal-via-gate
を簡単に実行できるようになります。
そうでない場合は、ポート転送を検討してください。
Host internal-via-gate
User me
Hostname internal
Port 22
ProxyCommand ssh gate nc %h %p
LocalForward 27015 localhost:27015
次に、接続して認証します(ssh internal-via-gate
)。
ログインしたら、次のコマンドを実行します。
rec -t mp3 - | nc -l 27015
、およびnc localhost 27015 | play -
。