允许 SCP 但不允许使用 SSH 进行实际登录

允许 SCP 但不允许使用 SSH 进行实际登录

有没有办法在 Linux 机器(在本例中为 Centos 5.2)上配置用户,以便他们可以使用 scp 来检索文件,但实际上无法使用 SSH 登录到服务器?

答案1

已弃用:请注意,以下答案已过时。rssh 不再维护并且不再是一种安全的方法。

rssh shell(http://pizzashack.org/rssh/) 就是为了这个目的而设计的。

由于 RHEL/CentOS 5.2 不包含 rssh 软件包,您可以在这里获取 RPM:http://dag.wieers.com/rpm/packages/rssh/

要使用它,只需将其设置为新用户的 shell,如下所示:

useradd -m -d /home/scpuser1 -s /usr/bin/rssh scpuser1
passwd scpuser1

..或者像这样更改现有的 shell:

chsh -s /usr/bin/rssh scpuser1

..并编辑/etc/rssh.conf以配置 rssh shell - 特别是取消注释allowscp行以启用所有 rssh 用户的 SCP 访问。

(您可能还想使用 chroot 将用户限制在自己的家中,但那是另一个故事。)

答案2

我来晚了,但你可以使用 ssh 密钥并在其 ~/.ssh/authorized_keys 文件中指定允许的确切命令,例如

无端口转发,无pty,命令=“scp 源目标”ssh-dss ...

您可能需要使用 ps 在目标上设置正确的命令设置。

PS:如果你使用“-v”运行测试 scp 命令,你会看到类似这样的内容

debug1: Sending command: scp -v -t myfile.txt

您会注意到“-t”是一个未记录的 scp 选项,由远端程序使用。这让您知道需要将什么放入 authorized_keys 中。

编辑: 您可以在以下位置找到更多信息(带有多个链接)这个 StackOverflow 问题

backup_user这是针对服务器端命名的用户的一个工作示例。

~backup_user/.ssh/authorized_keys服务器端的内容(有一些更多的安全限制):

no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="scp -v -r -d -t ~/CONTENT" ssh-rsa AAAAMYRSAKEY...

在 ~backup_user/ 中创建一个链接,链接到应该可访问内容的目录。

$ ln -s /path/to/directory/with/accessible/content ~backup_user/CONTENT

现在,从客户端来说,以下命令应该可以工作:

scp -v  -r  -P 2222 -i .ssh/id_rsa_key_file path/to/data backup_user@SERVER:~/CONTENT

此命令的作用:

  • 它显示详细信息(可选的-v:您可以从命令和authorized_keys文件中删除)
  • 它以递归方式复制路径/到/数据的内容。(可选的-r:如果您不想进行递归复制,可以从命令和authorized_keys文件中删除)
  • 它使用端口 2222 连接到服务器(可选的:您可以-P 2222从命令中删除)
  • 它使用身份文件来自动化连接(可选的:你可以删除-i .ssh/id_rsa_key_file
  • 的内容path/to/data将被复制到/path/to/directory/with/accessible/content/

要将一个(或多个)文件从服务器复制到客户端,你应该创建一个处理此问题的 shell 脚本如这里所述

答案3

我来晚了,但是我建议你看看ForceCommandOpenSSH 的指令。

Subsystem sftp internal-sftp

Match group sftponly
         ForceCommand internal-sftp

当然,这是 SFTP 而不是 SCP,但它达到了同样的目的,比使用受限 shell 更安全。此外,如果您愿意,您可以 chroot 用户。

答案4

我建议使用 scponly。

它是一个受限制的 shell,允许用户执行听起来像是将文件 SCP 到服务器的操作,但实际上不能登录。该软件的信息和源代码下载可用这里预编译的 RPM 包可通过EPEL YUM 存储库

安装后,您需要配置每个要限制访问的用户帐户,以使用新安装的受限 shell。您可以通过 /etc/passwd 手动执行此操作,或使用以下命令: usermod -s /usr/bin/scponly USERNAME

相关内容