web-dev-qa-db-ja.com

Debianに夢中になるBash

少し驚いています。AzureでVMをデプロイしましたが、SSHで接続すると、奇妙なbashが発生します。

以前はusername@Host:~$があったコマンドラインプレフィックスがありませんが、空です。
私も完了していません..bashと入力しても何も変わりません

これが私のユーザーの/ etc/passwd行です:

admusr:x:1000:1000 ::/home/admusr:/ bin/bash

enter image description here

何か案が ?
ありがとう

3
JeanneD4RK

これは通常、stdinがTTYでない場合に発生します。 (コメントを間違えました。これはstdoutまたはstderrとは関係ありません)。

SSHクライアントは、そのstdinがTTYであるかどうかを自動的に判断し、それに応じてSSHサーバーがこのセッションにPTYを割り当てるかどうかを要求します。

ローカルシェルのstdinにTTYがないか、パイプラインなどでsshを使用していると思われます... sshの動作をオーバーライドするのではなく、修正する必要があります(以下を参照)。

ttyを実行し、出力が/dev/pts/9のようなパスではなく「not tty」である場合、これは私の疑いを確認します。

完全に機能する用語で次のことを試してください(bashssh ${Host}に置き換えると、同様の結果が得られます)。

  • ssh ${Host}-shouldプロンプト、履歴などを備えた標準のリモートシェルを提供します...
    • 端末のTTY/PTYはsshstdinとして提供されているためです。
  • cat | ssh ${Host}-shouldあなたが報告しているようにあなたに "muted"シェルを与える
    • catstdout(TTYではない)はsshstdinとして提供されているためです。

この自動動作をオーバーライドするためのコマンドラインオプションがいくつかあります。

  • ssh -t-サーバー上のPTYの割り当てを要求
    • cat | ssh -t ${Host}は引き続き "muted"シェルになり、 "Pseudo-terminalwillの行に沿ってメッセージが表示されます。 stdinは端末ではないため、割り当てられません。 "
  • ssh -tt-サーバー上のPTYの強制割り当て
    • cat | ssh -tt ${Host}は、最初は「good」のように見えるセッションになりますが、実際にはかなり壊れていることがわかります... man ssh画面がいっぱいにならず、制御文字がリモートアプリケーションなどではなくSSHクライアント(またはより正確にはcat)にヒットします...
  • ssh -T-サーバー上のPTYの割り当てを無効
    • ssh -T ${Host}は「muted」シェルになります

実行可能で、次の内容のシェルスクリプトを実行することを検討してください。

#!/bin/bash

echo "hello"
echo "world"

この状況で実際に発生するのは、/bin/bashが実行され、ファイルがstdin(端末ではない)として提供されることです。 bashは、stdinがTTYではないことを検出し、コマンド間のプロンプトの出力やコマンドの履歴への記録など、特定の動作を抑制します。

1
Attie