多用户密钥
SSH 密钥 认证配置 挺简单的,就是ssh-keygen生成密钥公钥对。然后让服务器端放好公钥,本地有密钥就能实现认证。同时这对密钥在兼容ssh协议下都能用的。
LocalHost:L
ServerHost:S
ssh-keygen可以在L或S上运行,不过最终是让S上有公钥,L上有密钥。
推荐在L上运行ssh-keygen,然后用ssh-copy-id把公钥传到S上,这样有几个好处:
1. 公钥在网络上传输相对安全。
2. 使用ssh-copy-id会自动把公钥放到S上的$HOME/.ssh/authorized_keys 并且保证权限OK。
这里有个问题:
如果有两台S,这样本地就会有两份密钥,这样如何存放呢?
开始想到的方法:使用一套公钥密钥。使用ssh-copy-id到不同的server,同时维护config方便登录。 (相对不太安全,下面是我刚了解到的)
{还想到个方法是两台机器使用不同类型的密钥,rsa和dsa,这样就用两个密钥文件了,但是如果和很多台机器想不同密钥呢? 密钥不像公钥那样放在同一个文件里的吧?
[Ref ~/.ssh/id_rsa and ~/.ssh/id_dsa for protocol version 2 from man ssh]}
怎么在登录不同服务器使用不同的密钥呢?man ssh就看到有个 -i 参数可以指定不同的密钥。我习惯.ssh/config里放服务器信息,那对应的密钥信息怎么写呢 man ssh_config发现有个IdentityFile配置项。
现在要设置HostA和HostB的认证
ssh-keygen //设置密钥名 id_rsa.HostA 自动生成id_rsa.HostA .pub的公钥
ssh-keygen //设置密钥名 id_rsa.HostB 自动生成id_rsa.HostB .pub的公钥
ssh-copy-id -i id_rsa.HostA.pub useratA@HostA.domain.net
ssh-copy-id -i id_rsa.HostB.pub useratB@HostB.domain.net
5.本地.ssh/config文件
Host HostA
HostName HostA.domain.net
User useratA
IdentityFile ~/.ssh/id_rsa.HostA
Host HostB
HostName HostB.domain.net
User useratB
IdentityFile ~/.ssh/id_rsa.HostB
然后就可以直接ssh HostA 或者HostB使用不同密钥对登录了。
********************************************************************************************************************
多用户公钥
如果服务器的目录中没有authorized_keys 文件,只需要将id_rsa.pub公钥文件的名称更改为authorized_keys,如果已经有了authorized_keys文件,使用 “>>”重定向符将用户公钥追加到authorized_keys文件中
cat id_rsa.pub >> ~/.ssh/authorized_keys
或者
ssh-copy-id [-i [identity_file]] [user@]machine