实际上...一台服务器没有 SSH shell?
当您登录时,许多主机都会显示:
Shell access is not enabled on your account!
If you need shell access please contact support.
但它们支持 SFTP 和id_
SFTP 的 rsa 登录。
是否可以使用命令行上的 SFTP 来传输我的公钥以进行登录?
答案1
这取决于配置,但通常,您应该能够复制批处理文件ssh-copy-id
中的操作:sftp
!cat ~/.ssh/id_rsa.pub > /tmp/authorized_keys # prepare filename with keys
mkdir .ssh
put /tmp/authorized_keys .ssh/
!rm /tmp/authorized_keys # cleanup
但这有其局限性:
- 如果已经输入了一些内容
authorized_keys
,它将被覆盖(你可以将现有文件下载到本地,然后在本地追加 - 如果目录已经存在,则可能会失败
- 它只需要
id_rsa
(作为概念证明)。添加其他密钥非常简单
存储上述文件copy-id.sftp
并运行sftp -b copy-id.sftp your_host
就可以了。
答案2
https://wiki.archlinux.org/index.php/SFTP_chroot#Fixing_path_for_authorized_keys
您可能像下面这样强制使用 sftp。在这种情况下,请使用上面的
# AuthorizedKeysFile /etc/ssh/authorized_keys/%u .ssh/authorized_keys
AuthorizedKeysFile /sftp/%u/.ssh/authorized_keys .ssh/authorized_keys
Subsystem sftp /usr/lib/openssh/sftp-server
Match Group sftp
PasswordAuthentication yes
ChrootDirectory /sftp
ForceCommand internal-sftp -d /%u
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no