我搞砸了,退出 .bashrc

我搞砸了,退出 .bashrc

我在 .bashrc 文件中输入了“exit”。我没有物理访问机器的权限,因此我使用 ssh 来连接它。我没有 root 权限。每次我连接到服务器时,连接都会自动关闭。

到目前为止,我已经尝试过:

  • 使用 scp 和 sftp 覆盖 .bashrc。在我能做任何事情之前,连接就关闭了。
  • 使用一些不同的 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 文件仍然首先运行。

我尝试的另一件事是使用另一个帐户登录并使用 sudo 编辑 .bashrc,但我没有此帐户的 sudo 权限。

我想我会联系管理员。

编辑

@shellholic

我简直不敢相信,但这种方法奏效了!尽管“exit”出现在前几行(仅由几个如果积木和出口.bashrc 文件中的 .bashrc 语句)仍然成功,我尝试了 20 次(大约 3 分钟),但仍然成功使用 Ctrl-c 中断了它。我删除了 .bashrc 中有问题的行,现在一切都恢复正常了。

答案1

.bashrc您可以在执行退出部分之前尝试中止(ctrl+C) 。

我尝试在 testuser 的 bashrc 顶部添加以下内容,成功了,只是时间问题。对我来说非常简单:

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

答案2

我在一个新的集群上弄乱了我的 .bashrc 文件,我已经获得了试用权限。我不想看起来像个菜鸟,我最不想做的就是向管理员寻求帮助,我无法让适时的 ^+C 起作用。
然而,有效的方法是将“rm”命令作为最后一个参数发送到 ssh。即

ssh -tv user@host rm .bashrc

我无法让“mv”命令工作(之前尝试过不使用 -t),所以我认为 -t 选项一定起作用了,但您可以根据需要进行测试。我现在已经从 .bashrc~ 文件(由 vim 生成)中恢复了所有内容,除了有问题的行之外,一切都正常!=D

答案3

如果您可以以其他用户身份登录,请尝试以下操作:

su user -s /bin/sh

当然,您需要密码。

答案4

来自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 将被移出,在你的登录 shell 启动之前 - 然后你显然可以修复它bak.bashrc并将其移回原位。

相关内容