有什么办法可以在Linux机器上configuration一个用户(Centos 5.2在这种情况下),以便他们可以使用scp来检索文件,但实际上不能使用SSHlogin到服务器?
rssh shell( http://pizzashack.org/rssh/ )就是为了这个目的而devise的。
由于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
来configurationrssh shell – 尤其是取消注释allowscp
行来为所有的rssh用户启用SCP访问。
(您也可以使用chroot来保持家中的用户,但这是另一回事。)
我迟到了,但你可以使用SSH密钥,并指定在他们〜/ .ssh / authorized_keys文件中允许的确切命令,例如
no-port-forwarding,no-pty,command =“scp source target”ssh-dss …
您可能需要在目标上使用ps来设置正确的命令设置。
PS:如果你用“-v”运行一个testingscp命令,你可以看到类似这样的东西
debug1: Sending command: scp -v -t myfile.txt
你会注意到“-t”是远程程序使用的一个未logging的scp选项。 这给你一个想法,你需要把什么放在authorized_keys中。
编辑:你可以find更多的信息(与几个链接)在这个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 /中创build一个链接,链接到内容应该可访问的目录。
$ 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
) -r
) -P 2222
) -i .ssh/id_rsa_key_file
path/to/data
的内容将被复制到/path/to/directory/with/accessible/content/
要从服务器到客户端创build一个或多个文件副本,您应该创build一个shell脚本来处理这个问题
我晚了一点,但是我会build议你看看OpenSSH的ForceCommand
指令。
Subsystem sftp internal-sftp Match group sftponly ForceCommand internal-sftp
当然,这是SFTP而不是SCP,但它达到了相同的目标,比受限制的壳更安全。 另外,如果你愿意,你可以chroot用户。
我build议使用scponly。
这是一个受限制的shell,它允许用户做它听起来像SCP文件到服务器,但不实际login。该软件的信息和源代码下载在这里是可用的,预编译的RPM包可通过EPEL YUM存储库 。
一旦安装,您将需要configuration每个用户帐户,您希望限制访问,以使用新安装的受限制的shell。 您可以通过/ etc / passwd手动执行此操作,也可以使用以下命令: usermod -s /usr/bin/scponly USERNAME
我使用MySecureShell来做到这一点。 您也可以configuration其他限制。
https://github.com/mysecureshell/mysecureshell
限制只能连接到SFTP / SCP。 没有shell访问。
晚会很晚,但只是将git用户的shell设置为/ usr / bin / git-shell。 这是一个不允许交互式login的受限shell。 你仍然可以用“su -s / bin / bash git”或任何你的git用户名来代替用户。
我们在我们安全的ftp服务器上使用了一个名为scponly的psudo shell,用户只希望能够scp文件但不能login。
我发现一个很好的方法是使用authorized_keys文件的command =“…”function。 (build议给我这个页面 )
你要运行的命令是一个testing以scp(和rsync)开头的参数的命令。
这是authorized_keys文件:
# authorized_keys command="/usr/local/bin/remote-cmd.sh" ssh-rsa.....== user@pewpew
以下是remote-cmd.sh的内容:
#!/bin/bash # /usr/local/bin/remote-cmd.sh case $SSH_ORIGINAL_COMMAND in 'scp'*) $SSH_ORIGINAL_COMMAND ;; 'rsync'*) $SSH_ORIGINAL_COMMAND ;; *) echo "Access Denied" ;; esac
我想你可能还需要保护用户的authorized_keys文件,但我的目的是要有一个无密码的密钥,我可以使用备份,而不必创build一个全新的用户,并有钥匙不给壳(好的,很容易)
它不是最优美的解决scheme,但是你可以把这样的东西扔到用户.bashrc中
if [ "$TERM" != "dumb" ]; then exit fi
我发现SCP用户获得了“愚蠢”的TERM,而其他人通常会得到vt100。
我想用户可能可能scp一个新的.bashrc,这使得这不是最好的解决scheme,但对于一个快速和肮脏的解决scheme,这将工作