少し驚いています。AzureでVMをデプロイしましたが、SSHで接続すると、奇妙なbashが発生します。
以前はusername@Host:~$
があったコマンドラインプレフィックスがありませんが、空です。
私も完了していません..bash
と入力しても何も変わりません
これが私のユーザーの/ etc/passwd行です:
admusr:x:1000:1000 ::/home/admusr:/ bin/bash
何か案が ?
ありがとう
これは通常、stdin
がTTYでない場合に発生します。 (コメントを間違えました。これはstdout
またはstderr
とは関係ありません)。
SSHクライアントは、そのstdin
がTTYであるかどうかを自動的に判断し、それに応じてSSHサーバーがこのセッションにPTYを割り当てるかどうかを要求します。
ローカルシェルのstdin
にTTYがないか、パイプラインなどでssh
を使用していると思われます... ssh
の動作をオーバーライドするのではなく、修正する必要があります(以下を参照)。
tty
を実行し、出力が/dev/pts/9
のようなパスではなく「not tty」である場合、これは私の疑いを確認します。
完全に機能する用語で次のことを試してください(bash
をssh ${Host}
に置き換えると、同様の結果が得られます)。
ssh ${Host}
-shouldプロンプト、履歴などを備えた標準のリモートシェルを提供します... ssh
のstdin
として提供されているためです。cat | ssh ${Host}
-shouldあなたが報告しているようにあなたに "muted"シェルを与えるcat
のstdout
(TTYではない)はssh
のstdin
として提供されているためです。この自動動作をオーバーライドするためのコマンドラインオプションがいくつかあります。
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ではないことを検出し、コマンド間のプロンプトの出力やコマンドの履歴への記録など、特定の動作を抑制します。