我试图理解下面的场景。
有服务器A
和服务器B
服务器通过 ssh 密钥机制A
将文件推送到服务器。B
当服务器B
获取服务器推送的文件时A
,那么针对服务器中推送的文件将看到什么用户ID B
?
B
服务器只允许服务器使用特定的 userIdA
将文件推送到它是否可能?如果是,如何实现?
不知道linux中的这个逻辑。
请分享。
更新:服务器B
的 userID 名为 ,serverB
并希望服务器A
也使用相同的 userID serverB
。是否可以 ?
答案1
服务器 B 只允许服务器 A 使用特定的 userId 向其推送文件,这可能吗?如果是,如何实现?
每当您设置 SSH 密钥身份验证时,您都会执行此操作对于特定用户在目标服务器上。源端的用户有责任保证其私钥的安全,或者authorized_keys
如果用户丢失了密钥,则联系目标服务器的管理员以将公钥从相应的文件中删除。
请注意,连接两端的 UID 号和用户名都不必匹配:理论上,SSH 客户端可能位于嵌入式系统上,甚至可能根本没有用户帐户的概念。
您可以对多个连接使用相同的密钥对,或者为每个连接使用单独的密钥对,或者两者之间的任意组合。从技术上讲,可以将相同的公钥添加到服务器 B 上的所有用户帐户,从而允许持有相应私钥的用户以服务器 B 上的任何用户身份登录;但这通常是一件非常愚蠢的事情。
(每当服务器B发生不幸的事情时,所有其他用户都可以说“不是我,一定是Master Key的持有者使用我的帐户登录。”这样就可以转移责任。)
默认情况下,拥有 SSH 密钥对的私钥的人都能够登录服务器上的帐户,该服务器将同一密钥对的公共部分添加到用户帐户的authorized_keys
文件中,无论连接来自何处或密钥持有者声称位于连接的另一端。
可以在authorized_keys
文件中设置其他约束:您可以将密钥身份验证限制为仅在连接来自特定 IP 地址或主机名,或者基于 IP 或主机名的通配符模式时才起作用。有关更多详细信息,请参阅AUTHORIZED_KEYS FILE FORMAT
有关您的系统的段落man sshd
:不同版本中可用的确切选项可能有所不同sshd
。
通常,通过客户端用户名进行限制是没有意义的,因为服务器通常没有比询问 SSH 客户端更好的方法来找出该用户名......并且客户端可能会被黑客攻击并撒谎。除非用户允许其私钥落入坏人之手,否则成功的基于密钥的身份验证已经是用户有权在目标服务器上使用该特定帐户的有力证明。
因此,在您的情况下,如果服务器使用serverA
推送文件到服务器,并且该命令以 user 身份执行,那么该命令将尝试通过默认登录服务器来传输文件。serverB
scp /some/files B:/some/directory
userA
scp
userA
serverB
可以通过在命令中指定目标用户名来更改默认值:将导致通过登录为来scp /some/files userB@serverB:/some/directory
传输文件。userB
serverB
目标用户名也可以在 SSH 客户端配置文件中指定:如果在上的文件userA
中有这样的配置,那么在上运行命令时也将通过登录到as来传输文件。~/.ssh/config
serverA
scp /some/files serverB:/some/directory
serverB
userB
userA
serverA
Host serverB
User userB