回答:
はい。たとえば、トンネル(SOCKSプロキシなど)を設定するときなど、バックグラウンドでサイレント接続を行いたい場合があります。このような例では、プロセスにttyが含まれないようにします。
localhostからリモートホストへのポート転送を設定する例を次に示します...
ssh -l username -fNTL 8073:server:873
これを設定した後、リモートホストではなくローカルホストにrsyncすることができます。したがって、rsyncを介して効果的にrsyncをトンネリングできますssh
。
rsync --port=8073 -a me@localhost::myStuff /tmp/myStuff/
rsync server
がブロックされていてもブロックされていない場合は、これを言うでしょうssh
。
上記に加えて...
(1)異なるチルダエスケープ処理:
「〜。」pty(-t)がある場合、escapeは接続を切断します。長時間実行するコマンドの場合、誰かが〜を入力した場合に誰かが誤ってプロセスを停止させないようにすることができます。
$ ssh hostname.tomontime.com -t sleep 60
[タイプ〜。そして、それは切断します]
hostname.tomontime.comへの接続が閉じられました。
$ ssh hostname -T sleep 60
[〜と入力します。そして、スリープコマンドが無視する通常のキーストロークのようにそれを扱います。]
〜。
〜。
CTRL-Cでも同じことを試してください。-tを使用すると、CTRL-Cを「スリープ」に送信していることがわかります。-Tを使用すると、CTRL-Cをマシンで実行されているsshプログラムに送信します。これにより違いが生じる場合があります(つまり、プログラムはINTをHUPとは異なる方法で処理します)
(2)ptyまたはネットワーク接続アクティビティを最小限に抑えたいだけです。
ptyが不足しているマシンを再起動しようとするとき、システムにptyを割り当てようとすることを推奨したくありません!これにより、閉じる必要のあるネットワーク接続も最小限に抑えられます(再起動の遅延)。
これはより速く、より確実に動作します:
ssh -T hostname reboot
これには問題がある可能性があります:
ssh -t hostname reboot
ssh -tは、リモートマシン上に擬似端末を作成します。これは、複数のサーバーを介してsshコマンドをチェーンしていて、反対側に実際の端末が必要な場合に便利です(たとえば、「vi」を使用できます)。
端末がある場合、ログインスクリプトの動作が異なる場合は、 '-t'を使用したくない場合があります。これは悪いやり方ですが、ログインスクリプトが1)プロンプトを設定し、2)多くの対話型アプリケーションへのパスを展開する前にTTYをチェックするケースを見てきました。
別のインスタンス(上記のTomOnTimeで言及)では、実際にすべてのTTY(ptys)が使い果たされるケースに遭遇しました。明らかに設定ミスですが、大量のトンネルとrsyncのためにリソースを噛む必要はありません。