私は$HOME/.bashrc
ホスティングサーバーCentOS 7を実験しており、カスタムカスタマイズなしでどのように機能するかを確認することにしました。
私はexit 0
それを前に追加しましたsource /etc/bashrc
。
私の短い観察によると、ヒントと色だけが含まれているようです。しかし、ユーザーアクセス制御も管理しているようです。
今ログインしようとすると追われます。
なぜこれが起こるのですか?
リモートで修理できますか?
私は主にSSHを使用してログインします。この問題を解決するために設定できるプロパティまたは変数はありますか?
答え1
bashが正しく機能している場合は、シェルが.bashrc
対話型シェルの場合にのみ呼び出す必要があります。したがって、次の作業が必要です。
ssh server rm .bashrc
または
ssh server mv .bashrc .bashrc-off
これにより、サーバーに非対話型シェルが作成されるため、シェルは.bashrc問題の影響を受けません。
残念ながら、多くのLinuxディストリビューションは.profile
呼び出しを提供しますが.bashrc
、この場合は迷子になります。
答え2
~/.bashrc
Bashは、対話的に実行されているかどうかに関係なく、sshdによって実行されていると判断するたびにソースコードを直接取得します。(1)。
bashがこれを決定する方法は次のとおりです。ㅏ)envvarはSHLVL
1未満です。雨)SSH_CLIENT
またはenvvarsがSSH2_CLIENT
設定されているかstdin接続ソケット。
例:
$ echo echo this sux > /tmp/.bashrc
$ HOME=/tmp bash -c true
$ HOME=/tmp SHLVL= SSH_CLIENT= bash -c true
this sux
ksh93でbashを呼び出すと、stdinはUnixドメインソケットペアを使用してパイプを実装するソケットになることもあります。
$ ksh93 -c ': | HOME=/tmp SHLVL= bash -c :'
this sux
とても方法が思い出せませんねバイパスSSH経由で実行している場合~/.bashrc
(ユーザーが追加の環境変数を設定できるなど、SSH構成エラーを悪用することに加えて)
とにかく、私が知っている限り、多くのシステム管理者は、ユーザーがそれを迂回できないことを保証または保証しないようです。
(1)この行動はファイルに書き込む:
Bashは、リモートシェルデーモン(通常はrshd)またはセキュアシェルデーモンsshdによって実行されている場合など、ネットワーク接続に接続されている標準入力を使用して実行されていることを確認しようとします。 bashがこのように実行されていると判断した場合は、次のコマンドを読み込んで実行します
~/.bashrc
(ファイルが存在して読み取れる場合)。
Debian では/etc/bash.bashrc
以前にも入手できます~/.bashrc
(文書化されていません)。
答え3
コメントを要約します。
SSHが終了する理由は何exit
ですか?.bashrc
paul_pedantでコメント
あなたのプロフィールはログインシェルで作成されます。実行されない。したがって、
exit
ログインシェル自体を終了します。
リモートで修理できますか?
エマ・ルーオのコメント
sftp user@host
ホストで設定された方法(内部またはコマンドを介して)に基づいてアクセスできます。
roaima このような状況を避けるための最高のアドバイス
シェルに root としてログインしてください。その後、別のセッションを使用してもう一度ログインしてみてください。システムファイルを編集するときは常に
...
質問を完了するためにこのコメントを投稿してください。 @Paul_Pedant または @roaima が回答を投稿すると受け入れます。
答え4
私も同じことをしました。 Zshと同等のBashのexit 0
サーバーの末尾に追加しました。あなたのように私も私のサーバーにログインできません。.zshrc
.bashrc
既存のコマンドを上書きせずにaコマンド(安全コピー)を使用してscp
問題を解決しました。たとえば、次のようになります。.zshrc
exit 0
scp ~/.zsh/.zshrc my-server/.zsh/
望むより!マイサーバーに再度ログインできます。