j-h*_*hui 6 linux ssh terminal bash bashrc
.bashrc
我在通过 SSH 远程登录到服务器时正在试验我的文件。我无意中留下了一个exit
,导致所有后续登录立即断开连接。我实际上被锁在门外了。我能够在具有 root 权限的人的干预下恢复访问权限,但是如果没有其他人的帮助,这可能吗?
我尝试做诸如运行ssh <server> 'bash --norc --noprofile'
和 之类的事情ssh <server> 'mv .bashrc bashrc-backup'
,甚至尝试用 强制覆盖它scp empty-file <server>:.bashrc
。然而,所有这些选项似乎都依赖于.bashrc
在运行命令之前首先找到损坏的源,因此它们都不起作用。
很可能这种情况是没有办法摆脱的。但这是设计使然吗?为什么很容易将自己锁定在系统之外,例如仅通过运行,是否有原因ssh <server> 'echo exit > .bashrc'
?有没有办法减少这种错误?
正如另一个答案中所讨论的,当 SSH 客户端连接到 OpenSSH 服务器时,OpenSSH 服务器通常会使用用户的登录 shell 代表客户端启动 shell 会话:
scp
、rsync
、 和git
这样使用 ssh 进行传输的实用程序将请求在远程系统上运行命令,因此它们属于#2。如果远程用户的 shell 启动文件中存在导致 shell 退出的内容,那么您将无法进入。
然而,SFTP 是一个特例。OpenSSH 服务器可以配置为支持 SFTP,而无需启动外部命令。如果是这种情况,那么您可以使用 sftp 连接到服务器并删除、重命名或更改.bashrc
导致问题的文件。
这取决于服务器如何配置以支持 sftp。它可以通过启动外部程序(名为sftp-server
)来为 sftp 会话提供服务。在这种情况下,您会遇到与使用scp
. 或者,服务器可以通过称为“internal-sftp”的方式为 sftp 会话提供服务,这不需要调用 shell。这仅取决于特定 SSH 服务器的配置方式。
归档时间: |
|
查看次数: |
5630 次 |
最近记录: |