我正在尝试为另一个用户创建一个ssh密钥。我以root用户身份登录。我可以只编辑ssh-keygen生成的文件并将root更改为我想要的用户吗?

评论

如果您为用户生成密钥,则还必须具有一种获取私钥的安全方法,并且该私钥是用户的密码。更好的是,用户生成密钥,然后仅通过电子邮件将公共密钥发送给您。

但是,您不允许密码登录不是很困难吗?如果我仅使用密钥,并且设置了新用户,则他们将无法登录以设置密钥。

我没有足够的代表来回答,所以我做了一个要点,这是一个小脚本,可以创建用户,生成ssh密钥,将该公钥复制到〜/ .ssh / authorized_keys,然后将其压缩后发送至他们。 gist.github.com/robmsmt/b8300e7a0d711a7616e948a8232289a5

#1 楼

您可以使用ssh-keygen来做到这一点,但是请记住,私钥是对用户私有的,因此您应该非常小心地保持私钥的安全-与用户密码一样安全。甚至更安全,因为用户无需在首次登录时进行更改。

ssh-keygen -f anything在当前目录中创建两个文件。 anything.pub是公钥,您可以在任何目标服务器上将其附加到用户的~/.ssh/authorized_keys

另一个名为anything的文件是私钥,因此应为用户安全存储。默认位置为~username/.ssh/id_rsa(此处为id_rsa,这是rsa密钥的默认位置)。请记住,除用户之外,任何人都无法读取和写入.ssh目录,除用户之外,其他人都不能写入用户的主目录。同样,对私钥的权限也必须严格:仅对用户可读/写,并且.ssh目录和私钥文件必须归用户所有。

从技术上讲,您可以存储关键在任何地方。使用ssh -i path/to/privatekey,您可以在连接时指定该位置。同样,正确的所有权和权限很关键,如果您使用的不正确,ssh将无法正常工作。

评论


+1表示它是一个私钥(!)

– mailq
2011年10月22日19:49

您假设用户是真实的人。如果登录名是用于执行实用程序任务的非交互式用户(例如,在远程服务器上运行正在运行的维护脚本),那么可以,您可能会手动为该用户生成密钥。当然,这有其自身的安全隐患,但这是另一回事。

–里林多
11-10-22在22:31

@Rilindo ssh -i到非特权进程的私钥是我处理多个自动化rsync备份进程的方式。 :)

– Shadur
2011-10-23 9:56

我不喜欢那种说“你不应该那样做”的回答,但是不要回答这个问题。尽管这对于原始问题的上下文可能是正确的且有帮助的,但其他人可能在不同情况下遇到相同的问题。 “绝不应该为另一个用户生成ssh密钥”:在简单情况下就是如此。但是,请考虑例如同一自然人的多个身份。在多个系统上可能有多个帐户,但并非所有帐户都允许您生成密钥或适当地保护私钥。

–古斯塔夫
2015年9月9日在8:17

用户或用户的

–用户
2015年11月3日下午1:00

#2 楼

SSH密钥中没有用户信息。

公共密钥中的最后一个字段是注释(可以通过运行以下命令ssh-keygen -C newcomment进行更改)。

不需要做一些特殊的事情来为另一个用户创建密钥,只需将其放在正确的位置并设置权限即可。

评论


那是正确的答案。

–sebnukem
16年5月31日在18:57

我只是测试并确认,不仅只是注释,还可以将其删除并且按键仍然起作用。我一直认为这很重要!感谢您提供正确的答案。像上面的评论一样,我有理由为其他用户创建密钥,但是我不会说原因,因此没有论据。

– FreeSoftwareServers
16-09-18在19:15

公钥中的此用户名使我认为用户名已编码到公钥中,并且如果更改用户名,公钥将无效。非常感谢。

– Hobin C.
20年11月12日,9:12

#3 楼

使用su成为用户,并以该用户身份运行密钥:

[root@kvm0001 ~]# su - joeuser
[joeuser@kvm0001 ~]$ ssh-keygen -t dsa (or rsa1 or rsa, depending on your security requirements)
Generating public/private dsa key pair.
Enter file in which to save the key (/home/joeuser/.ssh/id_dsa):


评论


为什么要指定DSA?

– Ram
11-10-23在2:18

哎呀,习惯的力量。让我更新。

–里林多
11-10-23在2:51

您应该使用rsa(或可能是椭圆曲线变体之一)。 dsa仅限于不安全的密钥大小。 rsa1是ssh1的旧格式,现在不再应该使用。

– Peter Green
2015年12月19日,下午5:51

我的joeuser是服务用户,因此我无法以他们的身份登录。如何允许服务用户(仅运行进程)拥有ssh密钥?

–乔纳森
17年11月30日在4:09

@JonathanLeaders您将在成为该用户时为该用户指定外壳。像这样的东西:```[root @ ip-10-254-41-211〜]#grep ftp / etc / passwd ftp:x:14:50:FTP用户:/ var / ftp:/ sbin / nologin [root @ ip-10-254-41-211〜]#su-ftp su:警告:无法将目录更改为/ var / ftp:无此文件或目录此帐户当前不可用。 [root @ ip-10-254-41-211〜]#su -s / bin / bash ftp bash-4.2 $ whoami ftp bash-4.2 $```

–里林多
17年12月3日在22:54

#4 楼

如此处所示,您可以使用chmod更改要将SSH密钥添加到的用户文件夹的读取权限。

vim /home/username/.ssh/authorized_keys


然后,只需粘贴该文件底部的新行的关键

评论


链接已死...

– Nyxynyx
17年11月4日在17:49