sshの代わりにssh -tが適切でないのはいつですか?


15

リモートサーバーへの接続のssh -t代わりに使用するとssh、いくつかの利点があります。たとえば、vim:を使用してファイルを直接編集ssh -t host vim foo.txtできます。そうしないと失敗します。

sshを使用するときに(擬似)-ttyを割り当てることが悪いことになる状況はありますか?

回答:


11

「ssh hostコマンド」の典型的な使用方法である入力をパイピングまたは入力を戻す場合。制御文字はTTYレイヤーによって解釈される可能性があります(例:^ S)


10

はい。たとえば、トンネル(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


おかげで、これも正しかったのですが、私が見落としたより深刻な問題であるため、私はもう一方に投票しました。
アレックスJ

3

上記に加えて...

(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


2

ssh -tは、リモートマシン上に擬似端末を作成します。これは、複数のサーバーを介してsshコマンドをチェーンしていて、反対側に実際の端末が必要な場合に便利です(たとえば、「vi」を使用できます)。

端末がある場合、ログインスクリプトの動作が異なる場合は、 '-t'を使用したくない場合があります。これは悪いやり方ですが、ログインスクリプトが1)プロンプトを設定し、2)多くの対話型アプリケーションへのパスを展開する前にTTYをチェックするケースを見てきました。

別のインスタンス(上記のTomOnTimeで言及)では、実際にすべてのTTY(ptys)が使い果たされるケースに遭遇しました。明らかに設定ミスですが、大量のトンネルとrsyncのためにリソースを噛む必要はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.