不用调用shell的SSH

我已经设法搞乱了我系统上的一些共享库,现在我的shell不能运行,从而将我locking在系统之外。 在远程系统上configuration的sshsftpscp似乎都依赖于shell,所以这些替代scheme都没有了。 真的,这不是一个大问题,因为我有一些遥控手,可以通过控制台更改我的shellsh

然而,我很好奇,到SSH协议的机制,是否有可能在远程系统上进行身份validation和执行一些操作(例如,修改/etc/passwd ),而无需调用shell?

编辑

公正地说,对于那些build议在ssh命令string(例如, ssh myhost /bin/sh之后指定替代命令/ shell的人:手册页确实声明:

 If command is specified, it is executed on the remote host instead of a login shell. 

这肯定会令人困惑。

[仅用于logging – 在撰写本文时,问题早已得到解决,希望]

使用openssh ,通过sshd执行的任何命令都通过您的loginshell使用-c选项执行:

  • 命令在ssh命令行中传递(即ssh user@host command
  • 命令设置在.authorized_keys文件(即command="..." ssh-rsa AAAA...
  • 命令由sshd_configForceCommand选项指定
  • 执行~/.ssh/rc脚本(通过/bin/sh ~/.ssh/rc
  • 甚至是为了响应远程scp执行的服务器本地的scp命令

所以,如果你的loginshell是伪造的( /bin/false或者nologin )或者是破坏的,你就无法用ssh远程执行任何操作。 这也是为什么没有其他的shell是可能的。

不过,用sftp解决问题仍然是可能的。