私はめちゃくちゃに、.bashrcで終了します


27

.bashrcファイルに「exit」を入れます。マシンに物理的にアクセスできないので、マシンに接続するにはsshを使用します。ルート権限がありません。サーバーに接続するたびに、接続が自動的に閉じます。

これまで、私は試しました:

  • .bashrcをscpおよびsftpで上書きします。何かをする前に接続が閉じます。
  • いくつかの異なるGUIプログラムを使用してsshにアクセスします(接続が閉じます)
  • ftpでファイルを上書きします。(ftpは使用できません)
  • 自宅のコンピューターから
    • $ ssh host "bash --noprofile --norc"(接続が閉じます)
    • $ ssh host "mv .bashrc bashrc_temp"(接続が閉じます)
    • $ ssh host "rm .bashrc"(同じこと)
    • $ ssh host -t(接続が閉じます)

.bashrcを無効にするために、または.bashrcがソースされる前にファイルを上書きするためにできることはありますか?

更新

@ ring0

私はあなたの提案を試みましたが、運はありません。bashrcファイルはまだ最初に実行されます。

私が試した別のことは、別のアカウントでログインし、.bashrcをsudoで編集しましたが、このアカウントにはsudo権限がありません。

管理者に連絡すると思います。

編集

@shellholic

信じられませんが、このアプローチはうまくいきました!.bashrcファイルの最初の数行(少数のifブロックとexportステートメントのみで構成される)で「exit」が発生しますが、Ctrl-cで20回(約3分)以内に正常に中断できました。.bashrc内の問題のある行を削除しましたが、すべて正常に機能するようになりました。


2
darwinawards.comには、.bashrcファイルを上書きしたり、デフォルトのシェルを別のものに変更したりできるユーザーとして(一時的に)アクセスする必要があります。MSが言うように「システム管理者に尋ねる」。

2
man 8 sshdそれ9. Runs user's shell or command.は9番目のステップとしてそれを言う...:-/

1
シェルはまだ開かれますと.bashrcのが呼び出されるので、SCPも動作を停止します
アレクサンドルLevchuk

参考までに、これらの提案のほとんどが機能しないのは、sshがコマンドを引数としてユーザーのシェルに渡すことでコマンドを実行するためです。session.cでexecveを検索します。ユーザーのシェルのこの呼び出しの引数を変更/追加/削除する方法はありません。
マークワーグナー

回答:


37

の終了部分.bashrcが実行される前に中止(ctrl + C)を試みることができます。

テストユーザーのbashrcの先頭に次を追加してみましたが、うまくいきます。タイミングの問題です。私の場合はとても簡単です:

sleep 3
echo "Too late... bye"
exit 0

8
+1。おそらくシステム管理者の助けを必要としない唯一のソリューションだからです。ただし、正しいタイミングを得るには多くの運が必要です(ssh -v hostが少し役立つかもしれません)。
-JooMing

実際、ctrl + Cは機能しました。寝なくても。私は自分のbashrcに「exit」を配置し、約4回試行した後、すばやくctrl + Cで回復することができました。「-1」を「+1」に変更できるように、回答を編集してください。
アレクサンドルレフチュク

@Aleksandr Levchuk完了
シェルホリック

4
ここで、哀れなほどばかげたローテクと残忍な効果の組み合わせにとても感謝しています。
unixtippse

1
私は狂ったように笑っています。@JooMingおかげで、私はここからすべてのメソッドを試してみましたserverfault.com/questions/94503/...はCtrl + Cを押すと一つでも、それだけで、-vオプションを追加した後に働きました!
mxmlnkn

12

私は試用アクセスを与えられた新しいクラスターでも.bashrcファイルを台無しにしました。初心者のように見えたくないので、最後にやりたかったのは、管理者に助けを求めることでした。そして、適切なタイミングで^ + Cを働かせることができませんでした。
しかし、うまくいったのは、sshの最終引数として「rm」コマンドを送信することでした。すなわち

ssh -tv user@host rm .bashrc

動作する「mv」コマンドを取得できませんでした(-tなしで以前に試行しました)。したがって、-tオプションで実行できたはずですが、必要に応じてテストできます。.bashrc〜ファイル(vimによって作成)から、問題の危険な行とすべてが正しいのを除いて、すべて回復しました!= D


2
ssh -tv user@home mv .bashrc .bashrc-old私のために働いた
コード司令官

3

別のユーザーとしてログインできる場合は、これを試してください:

su user -s /bin/sh

もちろん、パスワードが必要です。


1
あなたは、異なる試すベースのシェルをshをことができませんでした。kshまたはcsh
ヒューバートKario

3

このような悪い経験を思い出すと、ssh、scp、sftpは初期化ファイルを実行しているようです。

私の提案は、単純なFTPを使用し、ログイン後にFTPコマンドラインでファイルbad fileを削除または名前変更することです。システムがFTPアクセスを許可すると仮定しています。そのような場合は、修復が完了したらパスワードを(安全に)変更してください。


Filezillaはこのために完璧に機能しました。[サーバー]メニューをドロップダウンし、[隠しファイルを強制的に表示]設定を選択するだけです。
ダニーG

1

からman sshOpenSSH_5.6p1少なくとも、いつ追加されたかわからない)

~/.ssh/rc
        Commands in this file are executed by ssh when the user logs in, just
        before the user's shell (or command) is started.  See the sshd(8) manual
        page for more information.

..これは~/.ssh/rc、次のものを含む作成できることを意味します。

mv ~/.bashrc ~/bak.bashrc

次にssh、ログインシェルが開始される前に、問題のあるbashrcが途中に移動します-明らかに修正してbak.bashrc、元の場所に戻すことができます


0

SCPまたはSFTPを介して接続し、その方法で.bashrcファイルを編集/名前変更/削除します。編集-D'oh、あなたがそれを試みたと言ったのを見る。しかたがない。


0

私は同じ問題を抱えており、どういうわけかそれを解決することができました。sshを使用してシステムにアクセスし、システムにログインしたらすぐにCtrl + cを押し続けました。その後、〜/ .bashrcが読み取られず、変更できました。


1
ここで最も支持された答えの正確な複製
パウスカ

0

これが機能していることがわかりました。

eを押してgrubブートローダーを中断します...もう一度eを押してgrubの読み込み行に入り、もう一度eを押してカーネル行を編集します。

行末に移動します。

行の最後にinit = / bin / bashを追加し、

Enterで戻り、bで起動し、

bashシェルを開き、vim /root/.bashrcを開いて適宜編集します。終了すると、ログインできるようになります


0

Homestead Vagrantを使用している場合...

これが私がこの漬物から抜け出した方法です。

(Windows 10でGit Bashを使用)

cd ../Homestead/
mv ~/.ssh/known_hosts ~/.ssh/known_hosts_OLD
ssh vagrant@127.0.0.1 -p 2222 mv ./.bashrc ./.bashrc_OLD

注:デフォルトのパスワードは「vagrant」です

これらの記事は私を助けました:


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