有没有办法在 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
我来晚了,但是我建议你看看ForceCommand
OpenSSH 的指令。
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