我搞砸了,在.bashrc中退出


27

我将“退出”放入我的.bashrc文件中。我没有对该计算机的物理访问权,因此使用ssh连接到该计算机。我没有root特权。每次我连接到服务器时,连接都会自动关闭。

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

  • 用scp和sftp覆盖.bashrc。在执行任何操作之前,连接已关闭。
  • 使用一些不同的GUI程序访问ssh(连接关闭)
  • 用ftp覆盖文件。(不能使用ftp)
  • 从我的家用电脑
    • $ ssh主机“ bash --noprofile --norc”(连接关闭)
    • $ ssh主机“ mv .bashrc bashrc_temp”(连接关闭)
    • $ ssh主机“ rm .bashrc”(相同的内容)
    • $ ssh host -t(连接关闭)

我可以做些什么来禁用.bashrc或在.bashrc来源之前覆盖该文件?

更新

@ ring0

我尝试了您的建议,但是没有运气。bashrc文件仍然首先运行。

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

我想我会联系管理员。

编辑

@shellholic

我不敢相信,但是这种方法行得通!即使在.bashrc文件的前几行(仅由几行if语句和export语句组成)内发生“退出” ,我仍然设法Ctrl-c在20次尝试(大约3分钟)内成功将其中断。我在.bashrc中删除了有问题的行,并且一切再次恢复正常。


2
darwinawards.com,您应具有(临时)用户访问权限,该用户可以覆盖.bashrc文件或将默认Shell更改为其他内容。如MS所说,“问您的​​系统管理员”。

2
man 8 sshd说这9. Runs user's shell or command.是第九步...:-/

1
scp也将停止工作,因为外壳仍然打开并且.bashrc被调用
Aleksandr Levchuk 2010年

仅供参考,大多数这些建议都不起作用的原因是因为ssh通过将任何命令作为参数传递给用户的shell来执行任何命令。在session.c中搜索execve。无法修改/添加/删除此用户外壳程序的参数。
马克·瓦格纳

Answers:


37

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

我尝试通过在测试用户的bashrc的顶部添加以下内容来实现它的工作,这只是时间问题。就我而言很简单:

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

8
+1,因为它可能是唯一不需要系统管理员帮助的解决方案。但是,要获得正确的时间需要很多运气(ssh -v主机可能会有所帮助)。
JooMing 2010年

实际上,Ctrl + C确实起作用。即使没有睡眠。我将“ exit”放入我的bashrc中,经过大约4次尝试,可以通过快速ctrl + C进行恢复。请对答案进行一些编辑,以便将“ -1”更改为“ +1”。
Aleksandr Levchuk 2010年

@Aleksandr Levchuk完成
shellholic 2010年

4
我非常赞赏可笑的低技术水平和残酷的有效性相结合。
unixtippse

1
我笑得像疯了似的,当它最终起作用时就匆匆忙忙了。谢谢@JooMing,我尝试了来自于此的所有方法serverfault.com/questions/94503/…甚至是按Ctrl + C的方法,但仅在添加-v选项后才有效!
mxmlnkn

12

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

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的shell:kshcsh
Hubert Kario,2010年

3

如果我记得我曾经有过这样的糟糕经历,那么ssh,scp,sftp确实会运行初始化文件。

我的建议是使用简单的FTP,然后在登录后在FTP命令行上删除或重命名文件错误的文件。我假设您的系统将允许您访问FTP。在这种情况下,一定要在维修完成后(安全地)更改密码。


Filezilla为此完美地工作。只需下拉“服务器”菜单,然后选择“强制显示隐藏文件”设置。
Danny 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将在启动登录Shell之前移出方式-然后,您可以明显地修复bak.bashrc并将其移回原位


0

通过SCP或SFTP连接,然后以这种方式编辑/重命名/删除.bashrc文件。编辑-天哪,我看到你说过你尝试过。那好吧。


0

我遇到了同样的问题,并且能够以某种方式解决它。我使用ssh来访问系统,并在登录到系统后立即按住Ctrl + c。然后,〜/ .bashrc没有被读取,并且我能够对其进行修改。


1
这里是最受好评的答案的精确副本
pauska,2011年

0

我发现这个工作。

通过按e来中断grub引导加载程序...再次按e进入grub加载行,再次按e编辑内核行,

转到行尾;

在行尾添加init = / bin / bash,

输入返回,b启动,

它将打开一个bash shell,打开vim /root/.bashrc并进行相应的编辑。退出,现在您将能够登录



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.