![SSH 自动登录偶尔会工作](https://linux22.com/image/590624/SSH%20%E8%87%AA%E5%8A%A8%E7%99%BB%E5%BD%95%E5%81%B6%E5%B0%94%E4%BC%9A%E5%B7%A5%E4%BD%9C.png)
我正在安装 20 台服务器。
在每个上面,我都为特定用户创建了一个 dsa 密钥。
我cat key.pub
从每台服务器到~/.ssh/authorized_keys
第一台服务器都做了
我验证了所有服务器都可以无需密码登录到第一台服务器。
使用 puppet,我将其.ssh/authorized_key
从第一台服务器复制到所有其他服务器。
权限相同,600
我无法自动登录;它仍然可以从服务器登录到第一个服务器 - 但无法登录到任何其他服务器。我以用户身份登录,通过 ssh 连接到其他服务器 - 然后它要求我输入密码。
我重新启动了 sshd 服务,但无济于事。 /etc/ssh/sshd_config 在第一台服务器和所有其他服务器上都是相同的。
这是 RHEL6。
有什么想法吗?我做错什么了吗?
这是 puppet 文件;它现在可以工作了——我的 root 权限是 775
file {"/home/user":
owner => user,
group => user,
ensure => directory,
mode => 755,
}
file {"/home/user/.ssh":
owner => user,
group => user,
ensure => directory,
mode => 700,
}
file {"/home/user/.ssh/authorized_keys":
owner => user,
group => user,
ensure => file,
mode => 600,
source => "puppet://puppet/files/user_sshkeys.txt";
}
答案1
目录的权限~/.ssh
应为700
。文件的权限~/.ssh/authorized_keys
应为600
。您可能希望将用户主目录的写权限限制为用户。
chmod go-w ~/
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
cat
不要使用,而是尝试ssh-copy-id
命令,因为它会处理这些权限。
您能向我们展示一下您的 Puppet 文件指令吗?这可能可以在那里得到纠正。
答案2
您要设置的是“基于主机的身份验证”。在网上搜索这个,您就会找到所需的内容。这是一个高级 SSH 主题,一旦您完成,就很容易做到。
答案3
Puppet(我写这篇文章时是 3.1.1 版)有一个名为 的类型ssh_authorized_key
。使用这个类型,你可以简单地将密钥推送到你的机器上,它会为你处理权限等。
以下是我的配置内容:
ssh_authorized_key { 'root pub key':
ensure => present,
key => "yourkeyhere",
name => "name@server",
user => "user",
type => "ssh-rsa",
您可以查看相关文档这里。
否则,其他人编写的模块可以做同样的事情,但由于类型的功能有一些限制,因此提供了一些额外的选项ssh_authorized_key
。