在本地主机上运行sshd服务。 使用ssh-keygen为root
和user1
创build了两对rsa密钥。 从root / .ssh / id_rsa.pub复制到user1 / .ssh / id_rsa.pub。 将权限更改为600.尝试了ssh -l user1 localhost
和ssh -l root localhost
但都失败, 权限被拒绝(publickey,keyboard-interactive)。 。 我必须将公钥复制到~/.ssh
文件夹中吗? configuration有什么问题? 为什么我无法连接到本地主机?
文件/etc/ssh/sshd_config
:
RSAAuthentication yes PubkeyAuthentication yes PasswordAuthentication yes UsePAM no AllowUsers user1 root PermitRootLogin yes
在文件/etc/ssh/ssh_config
是取消注释行:
RSAAuthentication yes PasswordAuthentication no ForwardX11 no SendEnv LANG LC_* HashKnownHosts yes GSSAPIAuthentication yes GSSAPIDelegateCredentials no PubkeyAuthentication yes
编辑1
我正在尝试连接到本地主机。 我必须能够使用公钥才能login到user1,同时可以用公钥和/或密码作为rootlogin。
编辑2
我复制了cp ~/.ssh/id_rsa.pub /home/user1/.ssh/authorized_keys
。 更改权限chmod -R 700 ~/.ssh
和chmod -R 700 /home/user1/.ssh
。 重启sshd'service ssh restart'。 但它似乎不工作。
编辑4
root@ubuntu:~# ssh-copy-id user1@localhost The authenticity of host 'localhost (127.0.0.1)' can't be established. ECDSA key fingerprint is 34:29:b6:1b:fe:84:eb:82:85:77:87:f6:25:39:61:5a. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts. Permission denied (publickey,keyboard-interactive). root@ubuntu:~# ssh-copy-id root@localhost Permission denied (publickey,keyboard-interactive).
日志:
# tail /var/log/auth.log ... ubuntu sshd[8476]: User root not allowed because account is locked
一个好的SSH麻烦文章: 问题和解决scheme
我遇到这个问题,当我试图login到一个没有密码的帐户,即使我使用SSH密钥对authentication,并已closures密码login。 解决方法是使用我的root帐户设置密码:
passwd user1 Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
每当遇到一个服务器ssh的问题时,总是最好添加-v
标志,例如
$ ssh -v host -l user
在上述两种情况下,都应将公钥( id_rsa.pub
)添加到“远程用户的.ssh / authorized_keys”文件中。 在你上面的例子中,都是root和user1。 这可以通过ssh-copy-id命令轻松完成。
/var/log/secure
将保存为什么login不成功的线索。
目录权限应该是700 [rwx](不是600)[rw-]
我碰到了一个类似的问题,而后来尝试做一个
chmod -R 600 ~/.ssh
显然,如果文件的权限是正确的,但是目录权限不是一样的权限错误可以出现。
我也认为你需要将文件从id_rsa.pub重命名为authorized_keys。
一些注意事项:由于您已经明确禁用了密码authentication,您不能使用密码login。 我相信你必须configuration允许的其他用户(匹配用户可能是最好的方式前进)。 另外,您需要特别允许root用户(PermitRootLogin将其设置为yes)。
向我们提供一些关于/etc/ssh/sshd_config
的设置的更多信息是有意义的,特别是StrictModes
( grep StrictModes /etc/ssh/sshd_config
)。 StrictModes
是控制sshd
对每个用户各自的~/.ssh
和~/.ssh/authorized_keys
的文件和文件夹权限的敏感程度的设置。 你也没有给我们sshd_config
的AuthorizedKeysFile
的设置。 非常相关,如果你的SSH服务器正在寻找文件的地方,而不是你把它。
但是,除了迄今为止的答案之外,可以有多种原因。 问题是即使你尝试了,也没有足够的信息来确定猜测是什么错误。
还有一件事情可以是PAM限制( sshd_config
UsePAM
)。 Ubuntu曾经在某个时候有这个。 如果用户帐户没有设置密码(仅公共密钥authentication),则不允许进入。
但让我给你一个通用的方法来debugging这样的问题。
sshd
故障排除 在这种情况下,我发现通常非常有用的是启动sshd
而不让它守护进程(“进入后台并从terminal分离”)。 通常日志不会太有帮助,特别是当你有一个configuration错误(至less这不是明显的例子)。
你从这样的terminal开始:
# $(which sshd) -Ddp 10222
这会给你足够的debugging输出,否则不会出现(没有-d
),或者如果你幸运的话,最终会在日志中出现。
注意: $(which sshd)
是满足绝对pathsshd
要求的最佳方法。 否则,你会得到以下错误: sshd re-exec requires execution with an absolute path
。 -p 10222
使sshd
监听那个替代端口,覆盖configuration文件 – 这样它就不会与可能运行的sshd
实例冲突。 确保在这里select一个空闲的端口。
这种方法在寻找问题方面帮了我很多忙,无论是身份validation问题,性能问题还是其他types的问题。 为了得到真正详细的输出到stdout
,使用$(which sshd) -Ddddp 10222
(注意添加dd
来增加详细程度)。 为了更好的debugging善良检查man sshd
。
在客户端, ssh
可以把-v
(高达-vvv
) -vvv
真正冗长的。
日志行
... ubuntu sshd[8476]: User root not allowed because account is locked
提示这是问题,所以运行:
sudo passwd -u root
在CentOS上,selinux可以阻止authentication。 使用以下命令解决问题:
restorecon -Rv ~ /. ssh