无需运行bash_profile或bashrc即可login

所以,让我们假设一个人在他们的东西里打了一些东西 bashrc阻止他(或她)通过sshlogin(即sshlogin由于文件错误而退出)。 有没有什么办法可以login而不执行(或者.bashrc,因为运行另一个),或者删除/重命名/使文件无效?

假设您没有物理访问权限,并且这是唯一有权访问的用户帐户。

参考:.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 

    我认为你唯一的select是:

    • ssh作为另一个用户和su到您的帐户;

    • 使用类似ftp或smbclient的东西,如果在主机上启用了相关的服务;

    • 在开放的networking服务中find一个开放的漏洞并利用它:)。

    • 得到一个pipe理员来解决这个问题。

    ssh -t用户名@主机名/ bin / sh为我工作。

    我使用已发布的CVE通过我已安装的networking监视软件中的Web界面以root身份执行命令。 “rm /RAID/home/tom/.bashrc”

    然后我可以login和SVN恢复我所做的更改。

    我有同样的问题,并以某种方式能够解决它。 我使用ssh访问系统,并在login系统后立即按住Ctrl + c。 然后,〜/ .bashrc没有被读取,我可以修改它。

    你不走运。

    所有的ssh命令都运行你的loginshell。 ssh $COMMAND运行$SHELL -c $COMMANDscp运行$SHELL -c /path/to/sftp-server ,普通的ssh只运行你的shell。

    你需要a)在没有source的情况下启动bash〜 ~/.bashrc~/.bash_profile和b),因为这样的shell不会是一个完整的loginshell /没有tty连接,强制ssh连接一个tty

     ssh -t user@host bash --norc --noprofile 

    就像是:

     ssh host "/bin/bash --norc" 

    这似乎工作,但请注意,PS1没有设置,所以你会input命令没有提示。

    这具有非破坏性的优点。

    以上答案都不能绕过ssh的loginshell。 您可以传递一个完整的命令行,因此它运行远程shell来处理该命令并设置该命令的工作环境。 这是shell的目的,这是Unix的方式。 如果你试图在没有shell的情况下运行,你将会遇到各种各样的兼容性问题。 同样,尝试一个控制-C应该做同样的调用退出这是你试图避免的行为。 如果bash继续它的一个错误。 为什么人们不断地说,手册页说了不同的东西需要引用它,因为它在我的手册页中没有提到。

    此外,在大多数Linux系统上,指定/ bin / sh没有任何意义,因为这只是bash的符号链接!

    想testing? 将“echo”语句添加到.bashrc和.profile中,查看运行的是哪一个。 我做了。 结果如下。

    ssh user@host将执行.bash_profile ssh user@host /bin/bash将执行.bashrc,但它认为它是非交互式的(不提示)。 ssh -t user@host /bin/bash执行.bashrc两次…一旦login,一次为传递的命令,所以指定任何shell将始终运行第一个。 ssh -T user@host与没有指定-T或-t相同。

    现在,如果你注意到,我的系统没有运行两个文件,只有一个或另一个。 但是原来的海报在.bash_profile里面有一行.bashrc,所以.bashrc总是会运行的。 不应该把那条线放在那里! 如果这条线不存在,你就不会有问题。

    你需要find另一种方式或find一个pipe理员。 这是pipe理员的用途。

    尝试

     echo ^C | ssh <hostname> ' rm .bashrc' 

    有C控制V然后C.

    您可以使用scp命令尝试用空文件覆盖.bash_profile 。 从我googlesearch,scp使用不读取.bash_profile的非交互式login。

    你也可以直接删除bashrc文件:

     ssh <hostname> rm ~/.bashrc 

    如果你的系统安装正常,.bash_profile将不会运行在一个非交互式的shell(比如运行一个命令)上。

    既然你声明问题是在.bash_profile文件中,请尝试移除它:

     ssh user@host "mv ~/.bash_profile ~/.bash_profile_broken" 

    UH = '用户@主机'; ssh $ UH'mv〜/ .bashrc〜/ letmein'; ssh $ UH

    请不要剪切和运行,更改userhost ,然后编辑letmein并保存为.bashrc

    荣誉user60069,它为我工作,但我使用特定于shell的启动文件.bashrc,因此使用/ bin / shlogin为我工作。

    但是,如果您处于“没有这样的运气”的情况下,我提供这个解决scheme,基于user60069和Dennis W的解决scheme:

     ssh -t you@host /bin/bash --noprofile --norc 

    Dennis W提供了–norc选项,有人说这个选项不适合他们。

    运行“man bash”或“man(你的shell)”选项来禁用启动文件。 你只需要使用一个可恶的shell来解决问题。

    从上面给出的build议和回应,我会说这不是.bashrc或.bash_profile文件。 另外ssh手册页说,如果你指定一个命令来执行,那么你的configuration文件将不会被读取。

    我build议尝试从绝对path执行不同的loginshell(ksh?csh?sh?); 另外,要小心这可能是一个完全不同的问题(配额?执行和读取您的主目录的权限?),所以侧面的方法会更好。 你可以要求另一个用户做一个ls -la $YOUR_HOME_DIR并把结果寄给你吗?