如何安全地允许 scp 但不允许 ssh

如何安全地允许 scp 但不允许 ssh

我使用 Mac Book Pro(名为 foo)工作。我有一台服务器,我的客户可以将大文件传输到其中。 (称为酒吧)。我经常通过 ssh 进入 bar,然后通过 scp 发送一个文件(称为嗡嗡声)到我的 Mac。

bob@foo$ ssh bar  
Last login: Fri Aug 23 14:49:32 2013 from foo  
bob@bar$ scp /guest/buzz bob@foo:~
Password: 

我不想每次将文件 scp 回 Mac 时都输入密码,因为我最终会自动执行此操作。
我知道我可以设置 ssh 密钥,但我担心如果有人破解bar他们可以轻松访问foo. (如我错了请纠正我)

有没有一种方法可以在没有密码的情况下将文件从 bar 复制到 foo ,并且在服务器受到威胁时不会让某人对我的 Mac 进行完全 shell 访问?

注意:我正在考虑在我的 Mac 上设置一个新用户并禁用该用户的 shell 访问权限可能工作,但我觉得有更好的方法。如果可能的话我宁愿不添加用户。

答案1

好吧,你把事​​情搞砸了。

据我了解,您只想从以下位置复制文件酒吧:

[file]  *bar* ------copy------> *foo*

为了做到这一点,你首先ssh酒吧然后scp归档到:

        *bar* -------ssh------> *foo* [file]

然后:

        *foo* ----scp[file]---> *bar*

如果你这样做,你就是这样做的不安全且错误的。您所要做的就是直接 scp 将文件返回给您:

bob@foo$ scp bob@bar:/guest/buzz ~

换句话说:

        *foo* <---scp[file]---- *bar*

现在有几个问题需要解决……

如何知道文件在哪里?

a) 在另一个终端中使用 SSH

只需打开第二个终端,SSH 即可酒吧,找到您的文件并将路径复制/粘贴到第一个文件。

b) 使用 SFTP

SFTP(与 FTP 或 FTPS 没有任何关系!)在 OpenSSH 中实现,并且默认可用。只需通过 SFTP 连接到服务器并使用类似 FTP 的命令来查找文件及其get内容。

c) 使用图形用户界面

例如,Filezilla 或 Nautilus 可以浏览远程 SFTP/SSH 共享。

d) 设置证书

当您设置证书连接时,您可以在本地端以及远程端执行制表符补全!例如,按照您的buzz示例,您可以执行以下操作:

bob@foo$ scp bob@bar:/guest/[tab][tab]

稍等一下,就会出现远程 /guest/ 文件夹中包含的文件列表。

如何使用证书设置 SSH?

a) 如果尚未完成,请生成您的个人 RSA 密钥对

如果您已经安装了 OpenSSH 客户端,则可以通过键入

bob@foo$ ssh-keygen -t rsa

(查看手册或在线了解所有可用选项)。它可能会要求您输入密码。这不是您的本地帐户密码,而是一个可选密码,可用于加密私钥你即将生成。

实际上,您将生成 2 个文件:

  • /Users/[您的用户名]/.ssh/id_rsa
  • /Users/[您的用户名]/.ssh/id_rsa.pub

第一个,*id_rsa* 应该是私人的。默认情况下,ssh-keygen将尽一切努力避免公开(使用文件系统访问权限)。这就是为什么它还会要求您输入(可选)密码。不要对此过于偏执,但请记住 *id_rsa* == 个人密钥 ==私人的。这个键应该永远不能离开你的电脑。

第二个是公开的。从这个公共证书中取回你的私钥需要大量的计算机能力(我真的意思是呵呵)。与全世界分享是完全安全的。即使在极不可能的情况下,美国国家安全局或类似机构真的想花费数百万美元破解您的公钥,您的 MacBook 仍然会安全……(或者不安全。想想看,如果有人想花那么多钱,您就处于安全状态)麻烦 :)

该公共证书实际上是您将放在远程服务器上的证书酒吧

b) 如何将我的公共证书放在服务器上?

两个选择。

  1. ssh-copy-id如果可用,请使用: bob@foo$ ssh-copy-id bob@bar。完毕。
  2. 如果是不是, 复制~/.ssh/id_rsa.pub酒吧:

    bob@foo$ sftp ~/.ssh/id_rsa.pub bob@bar:pub_cert

(在这里,您将个人文件夹中的id_rsa.pub公共证书复制到远程计算机.ssh/~酒吧在用户的主文件夹中鲍勃。这是默认设置。另请注意,已在该过程中id_rsa.pub重命名为。pub_cert我过去sftp只是为了向您展示它可以完全按照scp) 使用。

现在,我们将该证书复制到正确的位置:

bob@foo$ ssh bob@bar

现在您位于 Bob 的个人文件夹中酒吧

bob@bar$ cat pub_cert >> .ssh/known_hosts

(在这里,您使用 来显示 pub_cert 的内容cat。但是,您不是将其打印到屏幕上,而是将此输出重定向到文件:.ssh/known_hosts。请注意,重定向>意味着“用此流替换文件的内容”,而>>意味着“将流附加到现有文件的末尾”)。

c) 结果?

现在您可以scp//sftpssh酒吧无需提供密码即可随意使用。您还可以使用 [tab] 键自动完成本地和远程路径。

d) 我的 Mac 安全性怎么样?

通过这种方式,您甚至不需要在计算机上运行 SSH 服务器。只有一个 SSH 客户端(scp//程序sftpssh。这对您来说是安全的,即使酒吧受到损害。

e) 我用这些密钥/证书到底做了什么?

首先,您生成了几个文件:私钥和公共证书。您可以使用它们做很多与安全和身份验证相关的事情。但在我们的例子中,经过相当程度的简化,它们的使用方式如下:

当您尝试连接到酒吧,您将宣告您已获得可用于连接的证书。 酒吧将检查系统中的各个位置,包括~/.ssh/known_hosts.它将找到您发布的证书并使用它向您发送加密数据。

实际上,公共证书可以加密东西!

现在这很棒,但是如何才能明白?使用您的私钥。

私钥可以解密用相应的公共证书加密的东西!

这就是所谓的非对称加密。

然后,基本上,服务器会向您发送一个使用您的公共证书加密的复杂密码。您将收到它,用您的私钥解密它,并开始使用它与服务器双向加密数据。


现在,如果你真的很想按照自己的方式做事并且 SCP 回到

你只是自找麻烦而已。但为了减轻可能的妥协的影响,您可以设置仅 chroot 的SFTP服务器。scp并且ssh不再起作用,但是sftp,Filezilla 和其他东西会起作用。

参考:https://www.allthingsdigital.nl/2013/05/12/setting-up-an-sftp-only-account-with-openssh/

答案2

如果您查看文件的格式authorized_keys,您会发现您可以限制允许与特定键一起使用的命令。scp在本例中,这是我之前使用的方法,允许使用指定密钥对特定命令执行 SSH 操作。使用 来查看手册页man authorized_keys

答案3

您可能想看看https://github.com/scponly/scponly/wiki/Download或者你可以限制你的用户sftp只喜欢这样......

# usermod -s /usr/libexec/openssh/sftp-server whoever

答案4

与其他人一样,我建议您直接从其他机器复制:

bob@foo$ scp bar:/guest/buzz ~

如果出于某种原因,您想要从 bar 启动复制,您可以在 foo 上创建一个 ssh 密钥对,以允许 foo 登录到 foo。然后您可以使用 ssh 代理通过同一连接传递密钥。

bob@foo$ ssh -A bar
password:
bob@bar$ scp /guest/buzz bar:
# no password prompt

您也可以将公钥复制到 bar,这样就不会出现密码提示,或者您可以向密钥添加密码,在 ssh 进入 bar 时输入它,然后由于 ssh 代理,您不需要它用于相反的连接,同时保持安全。

相关内容