リモートサーバーへの接続にssh
ではなくssh -t
を使用すると、いくつかの利点があります。たとえば、vim:ssh -t Host vim foo.txt
でファイルを直接編集できます。そうしないと失敗します。
(疑似)-ttyの割り当てがsshを使用するときに悪いことになる状況はありますか?
入力をパイプするとき、または入力を取り戻すとき。これは、「ssh Hostコマンド」の一般的な使用方法です。制御文字はTTYレイヤーによって解釈されます(例:^ S)。
はい。たとえば、トンネル(SOCKSプロキシなど)を設定するときなど、バックグラウンドでサイレント接続を行いたい場合があります。このような例では、プロセスにttyを含めないようにします。
これは、localhostからいくつかのリモートホストへのポート転送を設定する例です...
ssh -l username -fNTL 8073:server:873
これがセットアップされた後、リモートホストではなくローカルホストにrsyncすることができます。したがって、ssh
...を介してrsyncを効果的にトンネリングできます。
rsync --port=8073 -a me@localhost::myStuff /tmp/myStuff/
これは、server
に送信されるrsyncがブロックされたが、ssh
はブロックされなかった場合に発生します。
上記に加えて...
(1)異なるティルダエスケープ処理:
「〜」 pty(-t)がある場合、escapeは切断します。長時間実行されるコマンドの場合、〜を入力した場合に誰かが誤ってプロセスを停止するのを防ぐことができます。
$ ssh hostname.tomontime.com -t sleep 60
[タイプ〜。そしてそれは切断されます]
hostname.tomontime.comへの接続が閉じられました。
$ sshホスト名-Tスリープ60
[〜と入力します。そして、sleepコマンドが無視する通常のキーストロークのように扱います。]
〜。
〜。
CTRL-Cで同じことを試してください。 -tを使用すると、CTRL-Cを「スリープ」に送信していることがわかります。 -Tを使用すると、CTRL-Cをマシンで実行されているsshプログラムに送信します。これにより違いが生じる場合があります(つまり、プログラムはINTをHUPとは異なる方法で処理します)
(2)ptyまたはネットワーク接続アクティビティを最小化したいだけです。
Ptyが不足しているマシンを再起動しようとするとき、システムにptyを割り当てようとすることを奨励したくない!これにより、閉じなければならない(再起動の遅延)ネットワーク接続も最小限に抑えられます。
これはより速くより確実に機能します:
ssh -Tホスト名再起動
これには問題がある可能性があります。
ssh -tホスト名再起動
ssh -tは、リモートマシンに疑似端末を作成します。これは、複数のサーバーを介してsshコマンドをチェーンしていて、実際の端末を向こう側にしたい場合に便利です(たとえば、「vi」を使用できます)。
端末がある場合にログインスクリプトの動作が異なる場合は、「-t」を使用しないでください。これはIMHOの悪い習慣ですが、ログインスクリプトが1)プロンプトを設定する前、2)多くの対話型アプリケーションへのパスを拡張する前にTTYをチェックするケースを見てきました。
別の例(上記のTomOnTimeで言及)では、実際にすべてのTTY(ptys)が使い果たされた場合があります。明らかに設定ミスですが、一連のトンネルとrsyncのためにリソースを噛む必要はありません。