.bashrc
中输入了错误内容,使他(或她)无法通过ssh
登录(即ssh登录由于文件错误而退出)。如果有人不执行该文件(或者因为一个人在运行另一个人,请登录.bashrc
),或者以其他方式删除/重命名/使该文件无效,是否可以登录?假设您没有物理访问权限,计算机,这是唯一具有ssh功能的用户帐户。供参考:
.bash_profile
包括.bashrc
:[[ -f ~/.bashrc ]] && . ~/.bashrc
编辑:我尝试过的事情:
ssh user@host "rm ~/.bashrc"
scp nothing user@host:/RAID/home/tom/.bashrc
ssh user@host "/bin/bash --norc"
全部给出错误:
/RAID/home/tom/.bashrc: line 16: /usr/local/bin/file: No such file or directory
/RAID/home/tom/.bashrc: line 16: exec: /usr/local/bin/file: cannot execute: No such file or directory
#1 楼
我认为您唯一的选择是:以其他用户身份登录并以su身份登录您的帐户;
如果主机上启用了相关服务,则使用ftp或smbclient之类的东西;
在开放式网络服务中发现一个开放漏洞并加以利用:)。
请管理员修复此问题。
评论
“假设您对计算机没有物理访问权限,并且这是唯一具有ssh功能的用户帐户。”
–丹尼斯·威廉姆森
09年12月15日在16:05
我要走这条路。找到解决方案后,我将发布解决方案。幸运的是,我有几种攻击途径。
–汤姆·里特(Tom Ritter)
09年12月15日在21:07
使用Filezilla将SFTP传输到我的服务器中,并修复了我。非常感谢,您救了我。我的.bash_profile中偶然有一个“退出1”状态,它使我感到沮丧。
– djangofan
2012年10月19日23:46
#2 楼
ssh -t username@hostname /bin/sh
对我有用。评论
效果很好-简单,并提供了一个可用于解决问题的外壳。
– MT。
2011年10月2日,16:55
尝试使用Google Chrome浏览器中的Secure Shell应用程序(chrome.google.com/webstore/detail/secure-shell/…)进行此操作,但无法弄清楚如何/在哪里放置命令行参数。有小费吗?
– Benj
14年2月19日在14:19
这对我不起作用(尽管应该根据手册页进行操作)。本地主机在远程主机上运行ubuntu 14.04.1,而在本地运行ubuntu 12.04.5。我无法进行rsync,因为我的登录shell是tcsh,并且在远程主机上它会打印垃圾(tcsh:没有这样的文件或目录tcsh:尝试从“ / u / levy”开始-我被告知这是因为目录已安装NSF)。我以为我可以绕过登录外壳来解决问题,但这不起作用。
–西尔维奥·利维(Silvio Levy)
2015年3月28日3:00
如果您的默认外壳是csh / tcsh,即使对于非交互式外壳,它也始终会提供.cshrc / .tcshrc。
–布莱恩·范登堡(Brian Vandenberg)
15年7月17日在21:37
@Tom Ritter-这需要被接受。
–戴夫·多普森
20年6月11日在20:45
#3 楼
我遇到了同样的问题,并且能够以某种方式解决它。我使用ssh访问系统,并在登录到系统后立即按住Ctrl + c。然后,〜/ .bashrc没有被读取,我可以对其进行修改。评论
我对此表示怀疑,但这确实有效。
– rmobis
16年5月19日在19:42
这是天才!
–user1747134
16年11月11日在11:14
确实有效...谢谢!其他方法对我没用。
– Zzzach ...
17-10-30在0:25
在只有.bash_profile的mac上,这对我有用:)
–AnneTheAgile
18年1月13日在14:51
是!这是唯一对我有用的
– DavidC
19年8月19日在10:05
#4 楼
您需要a)不使用source
或~/.bashrc
启动bash,并且b)由于这样的外壳不是完整的登录外壳/没有tty附加,请强制ssh附加tty: > ssh -t user@host bash --norc --noprofile
评论
此方法有效,但请注意,您将没有通常的提示,只是一个空白屏幕。尝试做ls说服自己自己在:)。还要注意,这将使用一个愚蠢的术语,所以对我而言,nano不起作用
–西门人Tomoiagă
'18 Sep 4'在8:22
@CiprianTomoiagă很好,这是一个主意,因为问题的前提是.bashrc已被破坏:)这应该使您足够了解清理损坏的情况,然后可以尝试再次将ssh放入普通shell。
–dimo414
20 Mar 18 '20在7:58
确实 !起初我有点困惑,因为甚至没有$符号来指示提示:)。
–西门人Tomoiagă
20 Mar 18 '20 at 11:16
#5 楼
我使用已发布的CVE,通过已安装的网络监视软件中的Web界面以root身份执行命令。rm /RAID/home/tom/.bashrc
然后我可以登录并svn还原我所做的更改。
评论
这既很棒又失败。
– MikeyB
2011-2-18在22:18
@TomRitter:请提供该ᴄᴠᴇ参考。
–user2284570
15年10月16日在13:24
它是仙人掌的老版本,因此,除非您运行的是8年以前的软件,否则我认为它不会对您有所帮助。如果您正在运行8年的软件,我将无济于事。 ;)
–汤姆·里特(Tom Ritter)
15年10月16日在20:32
出人意料地为我工作。谢谢。
–丹尼尔·达库纳(Daniel Da Cunha)
20 Mar 5 '20 at 23:38
#6 楼
您不走运。所有ssh命令都可以运行您的登录Shell。
ssh $COMMAND
运行$SHELL -c $COMMAND
,scp
运行$SHELL -c /path/to/sftp-server
,普通ssh
仅运行您的shell。评论
对于sftp来说也是如此-甚至SSH子系统也显然是在Shell中执行的。
–lxgr
2014年6月9日在23:17
以我的经验,即使ssh手册页显示“如果指定了命令,它是在远程主机而不是登录shell上执行的”,您是正确的。然而,发布者使用最高评分的答案(ssh主机名/ bin / sh)能够解决问题。是什么赋予了?
–西尔维奥·利维(Silvio Levy)
15年3月26日在21:15
@ Silvio,OP的回答是,他使用了与SSH不相关的漏洞。
–东武
15年3月27日在23:48
对。有人用最高的答案报告了成功,我急忙以为是OP。我希望它确实起作用了-我也有类似的情况,尽管这只是令人讨厌而不残废。 (请参阅我在上面评分最高的答案下的评论。)
–西尔维奥·利维(Silvio Levy)
2015年3月28日,下午3:02
#7 楼
以上答案均不能绕过ssh的登录shell。您可以传递完整的命令行,因此它将运行远程外壳程序以处理命令并设置命令的工作环境。那就是shell的用途,这就是Unix的方式。如果您尝试在没有外壳的情况下运行某些程序,则会遇到各种各样的兼容性问题。同样,尝试使用Control-C应该与调用exit相同,这是您要避免的行为。如果bash继续其错误。为什么人们总是说手册页说了一些不同的东西需要引用它,因为它在我的手册页中什么也没说。这只是bash的符号链接!要测试吗?在您的.bashrc和.profile中添加“ echo”语句,然后查看哪个正在运行。是的结果如下。 。一次登录时,一次用于传递的命令,因此指定ANY shell将始终首先运行。
ssh user@host
与根本不指定-T或-t相同。如果您注意到,MY系统未同时运行两个文件,则仅运行一个文件。但是原始发布者在.bash_profile中的一行运行.bashrc,因此.bashrc无论如何都将始终运行。不应该把那条线放在那里!如果该行不存在,那么您就不会有问题。您需要找到其他方式或找到管理员。这就是管理员的目的。
评论
一些好处;正如您所解释的那样,没有将作为命令传递的可执行文件提供帮助,但是有一点争议:如果/ bin / sh确实先执行,那么它将有所帮助,因为Bash在以sh调用时不会加载〜/ .bashrc。该答案是另一个答案的超集,因此请删除另一个答案。
–mklement
17年3月29日在21:23
#8 楼
像这样的东西:ssh host "/bin/bash --norc"
似乎有效,但是请注意,未设置PS1,因此您将在没有提示的情况下键入命令。 >这具有非破坏性的优势。
评论
这不起作用,它先尝试成功登录,但无法登录,因此无法运行bash --norc
–汤姆·里特(Tom Ritter)
09年12月15日在12:27
#9 楼
尝试echo ^C | ssh <hostname> ' rm .bashrc'
^ C有control-v然后c
评论
在我的系统上是ctrl-v和ctrl-c。不管怎么说,还是要谢谢你! :)
–mzuther
16年2月14日在13:24
#10 楼
ssh -t user@host "bash --norc --noprofile -c '/bin/rm .bashrc'"
评论
这对我来说是非常有限的环境,什么也没做。我必须指定.bashrc的完整路径。
–zbeekman
18年5月23日在15:28
#11 楼
只要您可以在.bashrc退出之前获得ctrl-C,就可以进行Ctrl-C混搭。不幸的是,如果exit
早于.bashrc,这可能很难做到。 /> { echo ^C; cat /dev/tty; } | ssh -tt user@host
请注意,
^C
的键入类似于ctrl-V,后跟ctrl-C。这通过管道传送单个ctrl-C,然后从控制端子输入,而
-tt
强制分配伪端子。总而言之,这会在远程计算机上为您提供一个(有些格式错误的)shell,同时尽可能多地绕过.bashrc。#12 楼
您可以尝试使用.bash_profile
命令用空文件覆盖scp
。通过我的Google搜索,scp使用了不会读取.bash_profile
的非交互式登录。评论
除非(假设)记住错误的目录结构,并且没有给我任何错误,否则这将不起作用-scp还会运行文件。
–汤姆·里特(Tom Ritter)
09年12月15日在12:30
人们没有意识到的是scp并不是什么特别的东西。这只是在ssh上运行的另一个命令-这意味着交互式ssh会话所发生的一切也与scp一起发生。
–幼虫
09年12月15日在14:24
关于sftp,afaik是一个ssh子系统。
– allo
17 Mar 16 '17 at 23:42
#13 楼
您也可以只删除bashrc文件:ssh <hostname> rm ~/.bashrc
评论
问题出在.bash_profile文件中,而不是在bashrc中。
– Laurent Etiemble
09年12月15日在12:31
这是行不通的-它首先尝试使用shell并失败。
–汤姆·里特(Tom Ritter)
09年12月15日在12:32
#14 楼
如果您的系统正常设置,则不会在非交互式外壳程序(例如运行命令)上运行.bash_profile。它不会干扰:ssh user@host "mv ~/.bash_profile ~/.bash_profile_broken"
评论
我不认为链接文件的方式很重要-.bash_profile包括.bashrc =(我添加了更多信息。
–汤姆·里特(Tom Ritter)
09年12月15日在12:37
但是Lockie的建议(已由bash手册页确认)是非交互式shell将不会运行.bashrc或.bash_profile。但是,即使当您在ssh命令行上传递命令时(如本例所示),bash仍将作为“交互式” shell启动,这意味着它将读取您的.bashrc文件。因此,一个好主意,但不幸的是ssh无法配合。
–幼虫
09年12月15日在14:32
#15 楼
UH ='user @ host'; ssh $ UH'mv〜/ .bashrc〜/ letmein'; ssh $ UH
请勿剪切并运行,更改
user
和host
,然后编辑letmein
并另存为.bashrc
#16 楼
对user60069表示感谢,它对我有用,但是我使用了特定于外壳的启动文件.bashrc,所以使用/ bin / sh登录对我有用。这样的情况”,我根据user60069和Dennis W的解决方案提供了此解决方案:为他们提供帮助。
运行“ man bash”或“ man(您的外壳)”以选择禁用启动文件的选项。您只需要花费可憎的shell来解决问题。
#17 楼
其他登录服务器的方法是没有配置文件,请在下面找到命令ssh -t user@host bash --noprofile
对于使用pem文件且没有其他用户的AWS
ssh -ti "YOUR-PEM-FILE-NAME.pem" ec2-user@YOUR-IP-ADDRESS bash --noprofile
希望有帮助!
#18 楼
这对我有用$ ssh <hostname> bash --rcfile /dev/null
#19 楼
从上面给出的建议和响应中,我会说它不是.bashrc或.bash_profile文件。 ssh联机帮助页还说,如果您指定要执行的命令,则不会读取您的配置文件。我建议尝试从绝对路径执行不同的登录shell(ksh?csh?sh?)。另外,请注意,这可能是一个完全不同的问题(quota?执行和读取主目录上的权限吗?),所以使用侧面方法会更好。您可以要求另一个用户执行
ls -la $YOUR_HOME_DIR
并将结果邮寄给您吗?
评论
您的scp命令将不起作用,因为连接时scp还将读取.bashrc。为避免该问题,将来,您可以在./bashrc的开头添加[-z“ $ PS1”] &&之类的内容。这样,scp将在第一行之后停止解析.bashrc,并且在紧急情况下您可以将其覆盖。