我弄乱了系统上的一些共享库,现在我的 shell 无法运行,因此我被锁定在系统之外。远程系统上配置的ssh
、sftp
和scp
似乎都依赖于 shell,因此这些替代方案不可行。实际上,这不是什么大问题,因为我有一些远程人员可以将我的 shell 更改为sh
通过控制台。
然而我很好奇,深入了解 SSH 协议的机制,是否可以在/etc/passwd
不调用 shell 的情况下对远程系统进行身份验证并执行某些操作(例如,修改)?
编辑
公平地说,对于建议指定替代命令/shell 的人后ssh 命令字符串(例如ssh myhost /bin/sh
):手册页做状态:
If command is specified, it is executed on the remote host instead of a login shell.
这肯定会造成混淆。
答案1
[仅供参考——在撰写本文时,希望问题已经得到解决]
使用openssh
,执行的任何命令都sshd
可以通过您的登录 shell 执行,选项如下-c
:
- 命令行中传递的命令
ssh
(即ssh user@host command
) - 文件中设置的命令
.authorized_keys
(即command="..." ssh-rsa AAAA...
) ForceCommand
由选项指定的命令sshd_config
- 脚本的执行
~/.ssh/rc
(通过/bin/sh ~/.ssh/rc
) - 即使
scp
是响应远程命令而执行的本地服务器命令scp
因此,如果您的登录 shell 是伪造的(/bin/false
或nologin
)或损坏的,您就无法使用 远程执行任何操作ssh
。这也是为什么没有替代 shell 的原因。