我使用puttygen.exe
创建密钥对(客户端是Windows 8)。在服务器(Ubuntu 12.04.3 LTS)上,我将我的公钥放在~/.ssh/authorized_keys
中。公钥是这样的:
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAopfM6RHOgnuc4Aftn3t4k5UIAT3StCAbn/vg/IMbphbXadshC+79sIlRq3P4zGzMjFTP4hKnzu6ehLV5lmj/qorq3SKT+bPO5Qrac3VbIlrGvuBFDDjP82I2Hwg3HzlsFTstqk++KToapaTYZ7jENEYyPl2wnzITJnt//+4U1o6juoXTKgdNE02hHnRZyHOV/bnkZyJJCEwJv5U0eXSThQnhmXtUxGT8U0HQNFiXfqIIVllhWiCnyrhhIaKz/CIJNAd2VmzyJzQtJtTQX8aWSNVrZju6Sv2/RncTNvsACdNgjjh/FH8PQXaep00jlJ3MOdsC8vz6VSPFbh6iKy1oLQ== rsa-key-20131231
所以这是正确的(一行,没有评论,从ssh-rsa开始,等等)
.ssh
dir权限级别为700,authorized_keys文件权限为600.我尝试登录的实际用户拥有的目录和文件。
当我尝试连接时,我得到'server refused our key'
和服务器要求输入密码。就这样。尝试使用密钥登录时,没有任何内容记录到/var/log/auth.log
。
我到处寻找,所有文章和提示都提到为文件/目录设置chmod 600和700并正确格式化密钥。我已经做了所有这些仍然'拒绝我们的关键'错误,我没有想法。
好吧,我的钥匙上有一个小错字。显然,当粘贴到文件时,第一个字母被切断,它以sh-rsa而不是ssh-rsa开头。
nrathathaus - 你的答案非常有帮助,非常感谢,这个答案归功于你:)我喜欢你说并在sshd_conf中设置:
LogLevel DEBUG3
通过查看日志,我意识到sshd正确读取密钥但由于标识符不正确而拒绝它。
对于那些从Windows Server收到此错误的人,我收到了同样的错误,这是一个用户帐户问题。对于许多组织,管理员的组策略可能不允许设置SSH服务器和连接。使用这种类型的设置,必须从本地管理员帐户完成。如果您确认公钥中没有任何拼写错误,可能值得研究。
在我的情况下,我不得不在Centos6.6上禁用SELinux以使其工作:)
编辑/ etc / selinux / config并设置以下内容,然后重新启动主机。
selinux=disabled
BTW ...忘了提到我必须设置LogLevel = DEBUG3来识别问题。
我在solaris上遇到了同样的错误,但在/var/adm/splunk-auth.log中找到了以下错误:
sshd: [auth.debug] debug1: PAM conv function returns PAM_SUCCESS
sshd: [auth.notice] Excessive (3) login failures for weblogic: locking account.
sshd: [auth.debug] ldap pam_sm_authenticate(sshd-kbdint weblogic), flags = 1
sshd: [auth.info] Keyboard-interactive (PAM) userauth failed[9] while authenticating: Authentication failed
在/ etc / shadow中,帐户被锁定:
weblogic:*LK*UP:16447::::::3
删除了“* LK *”部分:
weblogic:UP:16447::::::3
我可以像往常一样使用ssh和authorized_keys。
在我的情况下,它是由(/etc/ssh/sshd_config
)引起的:
PermitRootLogin no
改为yes
,重启服务并正常进入。
运行Windows 8.1我遇到了server refused our key
问题。
遵循指南:https://winscp.net/eng/docs/guide_windows_openssh_server使用Windows登录username
和password
很容易建立连接。然而,使用username
结合private key
验证,响应是server refused our key
。
使用公钥使其工作归结为文件的权限:C:\ProgramData\ssh\administrators_authorized_keys
这是一个有用的页面:https://github.com/PowerShell/Win32-OpenSSH/wiki/Troubleshooting-Steps
停止两个OpenSSH服务,然后用command prompt
打开admin permissions
。然后运行:C:\OpenSSH-Win32>c:\OpenSSH-Win32\sshd.exe -ddd
注意:指定exe的完整路径,否则sshd
抱怨。这将创建一次性使用连接侦听器。 -ddd
是详细的3级。
建立连接后,扫描日志显示:
debug1: trying public key file __PROGRAMDATA__/ssh/administrators_authorized_keys
debug3: Failed to open file:C:/ProgramData/ssh/administrators_authorized_keys error:2
debug1: Could not open authorized keys '__PROGRAMDATA__/ssh/administrators_authorized_keys':
No such file or directory
必须创建文件:C:\ProgramData\ssh\administrators_authorized_keys
并将public key
文本复制到其中,例如:ssh-rsa AAAA................MmpfXUCj rsa-key-20190505
然后保存文件。我用UTF-8
将文件保存为BOM
。没有测试ANSI
。
然后再次运行一次性命令行,在日志中显示:
debug1: trying public key file __PROGRAMDATA__/ssh/administrators_authorized_keys
debug3: Bad permissions. Try removing permissions for user: S-1-5-11 on file C:/ProgramData/ssh/administrators_authorized_keys.
Authentication refused.
S-1-5-11
是给System
的名字。
要修复Bad permissions
,右键单击administrators_authorized_keys
文件,转到Security Tab
,单击Advanced
按钮并删除继承的权限。然后删除除Windows登录用户名之外的所有Group or user names:
,例如:YourMachineName\username
该username
的权限应该是Read Allow
,Write Deny
其他一切都未选中。该文件的所有者也应该是YourMachineName\username
这解决了这个问题。
其他有用的链接:
从以下网址下载OpenSSH-Win32.zip:https://github.com/PowerShell/Win32-OpenSSH/releases
C#如何使用WinSCPnet.dll建立与OpenSSH服务器的连接的示例:https://winscp.net/eng/docs/library#csharp
以下是使用WinSCPnet.dll
建立连接的代码段:
static void WinSCPTest() {
SessionOptions ops = new SessionOptions {
Protocol = Protocol.Sftp,
PortNumber = 22,
HostName = "192.168.1.188",
UserName = "user123",
//Password = "Password1",
SshHostKeyFingerprint = @"ssh-rsa 2048 qu0f........................ddowUUXA="
};
ops.SshPrivateKeyPath = @"C:\temp\rsa-key-20190505.ppk";
using (Session session = new Session()) {
session.Open(ops);
MessageBox.Show("success");
}
}
用自己的价值取代SshHostKeyFingerprint
和SshPrivateKeyPath
。
编辑:添加了administrators_authorized_keys文件权限的屏幕截图:
当OpenSSH SSH Server
作为服务运行时,只有System
应该获得许可。但是,如果从命令提示符运行sshd.exe
,则当前用户应该是列出的唯一用户(读取允许,写入拒绝)。
我正在使用带有psftp的PUTTYgen文件,当我们需要为客户端创建新密钥时,我在Windows Server上遇到了这个问题。 private_key_name.ppk文件和open_ssh.txt文件必须位于同一目录中才能使连接正常工作。
在我的情况下,家庭在nfs是777,需要750.这解决了问题。
我已经解决了这个问题,puttygen是第三方软件,由它生成的ssh密钥没有直接使用,所以你必须做一些改动。例如,它看起来像这样
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20170502"
AAAAB3NzaC1yc2EAAAABJQAAAQEAr4Ffd3LD1pa7KVSBDU+lq0M7vNvLp6TewkP7
*******C4eq1cdJACBPyjqUCoz00r+LqkGA6sIFGooeVuUXTOxbYULuNQ==
---- END SSH2 PUBLIC KEY ----
我省略了中间的一些字母,替换为*,如果没有,StackOverflow告诉我代码格式错误,不要让我发帖。
这是我的puttygen生成的ssh密钥,你必须改为这个
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAr4Ffd3LD1pa7KVSBDU+lq0M7vNvLp6TewkP7wfvKGWWR7wxA8GEXJsM01FQw5hYWbNF0CDI7nCMXDUEDOzO1xKtNoaidlLA0qGl67bHaF5t+0mE+dZBGqK7jG9L8/KU/b66/tuZnqFqBjLkT+lS8MDo1okJOScuLSilk9oT5ZiqxsD24sdEcUE62S8Qwu7roVEAWU3hHNpnMK+1szlPBCVpbjcQTdiv1MjsOHJXY2PWx6DAIBii+/N+IdGzoFdhq+Yo/RGWdr1Zw/LSwqKDq1SmrpToW9uWVdAxeC4eq1cdJACBPyjqUCoz00r+LqkGA6sIFGooeVuUXTOxbYULuNQ== yourname@hostname
在我的情况下,我删除了一些评论,例如
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20170502"
---- END SSH2 PUBLIC KEY ----
并在开头添加ssh-rsa
,最后添加yourname@hostname
。注意:不要在最后删除==
,你必须为你更改“你的名字”和“主机名”,在我的情况下,是uaskh@mycomputer
,你的名字是你要登录你的vps。当所有这些事情都完成后,你可以上传公共密钥到uaskh的home~/.ssh/authorized_keys
由cat public-key >> ~/.ssh/authorized_keys
然后sudo chmod 700 ~/.ssh
sudo chmod 600 ~/.ssh/authorized_keys
然后你必须修改/ etc / ssh / sshd_config,RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
我的操作系统是CentOS 7,这是我第一次回答问题,我会尽力去做,谢谢!
我有这个问题,sshd只能从authorized_keys2
读取。
复制或重命名文件为我解决了问题。
cd ~/.ssh
sudo cat authorized_keys >> authorized_keys2
附:我正在使用Windows中的Putty并使用PuTTyKeygen进行密钥对生成。
在尝试通过Mobaxterm登录时,我遇到了类似的问题。私钥是通过puttygen生成的。在我的情况下,重新生成密钥有帮助。
添加一些想法作为其他答案有帮助,但不完全适合。
首先,如接受的答案中所述,编辑
/etc/ssh/sshd_config
并设置日志级别:
LogLevel DEBUG3
然后尝试进行身份验证,当它失败时,查找日志文件:
/var/log/secure
它会有你想要的错误。
使用Cpanel时,您可以检查密钥是否已获得授权
SSH访问>>公钥>>管理>>授权或取消授权。
如果你在/var/log/secure
中收到此错误
错误:key_read:key_from_blob AA AAB3NzaC1yc2EAAAABJQAAAQEAoo3PFwX04NFG + rKz93l7em1BsUBzjHPMsswD
这意味着你的密钥有空间,如果你在查看.ppk
文件时通过puttgen生成密钥,它将如下所示:
AAAAB3NzaC1yc2EAAAABJQAAAQEAoo3PFwX04NFG+rKz93l7em1BsUBzjHPMsswD
al74MLaJyhQD0pE23NS1izahbo1sJGnSJu2VJ//zxidSsba6xa6OvmeiKTwCz0E5
GMefdGVdpdbTlv99qjBl1+Nw1tDnHIC0+v9XmeZERQfCds9Kp1UivfReoYImntBC
gLtNyqRYrSu8csJCt7E1oY8QK6WP1vfYgAQ2taGyS9+g7FHyyf5VY2vH3oWzzbqz
xjsSLAv3zEQSm1LzSw9Pvc8iwasFyUMBOPj31CKQYTXyX8KpJTr0Zb7oqMauBE5L
VwxZhlcJHbj0FsMbF/+GRjvgexymCi3bHmwGQ6FEADNd0RkhdQ==
当你尝试粘贴它时,你会在读取密钥时出错,所以尝试编辑密钥并使其成为一行并尝试它
这应该看起来像什么
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAoo3PFwX04NFG+rKz93l7em1BsUBzjHPMsswDal74MLaJyhQD0pE23NS1izahbo1sJGnSJu2VJ//zxidSsba6xa6OvmeiKTwCz0E5GMefdGVdpdbTlv99qjBl1+Nw1tDnHIC0+v9XmeZERQfCds9Kp1UivfReoYImntBCgLtNyqRYrSu8csJCt7E1oY8QK6WP1vfYgAQ2taGyS9+g7FHyyf5VY2vH3oWzzbqzxjsSLAv3zEQSm1LzSw9Pvc8iwasFyUMBOPj31CKQYTXyX8KpJTr0Zb7oqMauBE5LVwxZhlcJHbj0FsMbF/+GRjvgexymCi3bHmwGQ6FEADNd0RkhdQ== username@domainname
对我有用的是:
这次对我有用。但是我不知道为什么它在启动实例时最初没有我的密钥文件信息。查看此链接太https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html#TroubleshootingInstancesConnectingMindTerm
在我的情况下,问题是这样的,在生成ssh密钥期间,我故意更改了密钥的默认目录。因此,我选择使用~/home/user/folder1/.ssh/authorized_keys
而不是使用位置〜/ .ssh / authorized_keys,因为这些更改工作我应该对此文件/etc/ssh/sshd_config
上的新位置进行相同的更改。但在我意识到这一点之前,我已经尝试了其他人在这里建议的几种解决方案,包括将主文件夹的权限设置为700
,将.ssh目录设置为600
。
修复Root安装的步骤(我随后通过ec2-user文件夹和授权密钥文件更改了权限)此过程类似于分离并附加笔式驱动器
以下是您可能遇到的其他一些情况 -
- 您正在使用SSH私钥,但相应的公钥不在authorized_keys文件中。
- 您没有authorized_keys文件的权限。
- 您没有.ssh文件夹的权限。
- 您的authorized_keys文件或.ssh文件夹未正确命名。
- 您的authorized_keys文件或.ssh文件夹已删除。
修复它们的步骤
现在,在您登录到以下步骤的新ec2运行之后
sudo mount /dev/mapper/rootvg-home /mnt
现在我们已经解决了我们面临的问题。大多数情况下,它可能是用户权限问题 - 卸载它的Umount / mnt - 现在转到控制台并指向附加到新实例的卷并将其分离 - 分离后,将其作为/ dev / sda1附加到新卷
有了这个说你应该能够成功登录
根据我的经验,我建议你应该从putty生成密钥,不应该从linux端生成。因为密钥将是旧的PEM格式。无论如何,只是我的建议。我做了以下步骤,并与我和我的团队一起工作。
检查你的密钥,今天应该是一个rsa(id_rsa.pub)密钥而不再是一个dss(id_dsa.pub)密钥,使用puttygen 0.70并选择RSA类型的密钥生成,替换主机上的公钥〜/。 SSH / authorized_keys中
另一个原因可能是UTF-8 BOM文件中的authorized_keys
。
在我的情况下,我不得不将/ home / user的权限从0755更改为0700。
在我的情况下,是一个权限问题。
我将日志级别更改为DEBUG3
,在/var/log/secure
中我看到这一行:
Authentication refused: bad ownership or modes for directory
谷歌搜索,我发现这篇文章:
https://www.daveperrett.com/articles/2010/09/14/ssh-authentication-refused/
chmod g-w /home/your_user chmod 700 /home/your_user/.ssh chmod 600 /home/your_user/.ssh/authorized_keys
基本上,它告诉我:
w
权限700
目录的.ssh
的许可600
文件的authorized_keys
的权限。这很有效。
另一件事是,即使我启用root登录,我也无法让root
工作。更好地使用其他用户。
我正在添加这个答案,以帮助像我一样花费数小时搜索互联网但没有成功的人。
您的家庭文件夹可能会被加密。
或者就此而言,嵌套了“authorized_keys”文件的任何文件夹。伙计,这会为我节省很多时间。要检查,请执行
ls -A
在您要确定其加密状态的目录上。如果该文件夹包含名为“.encryptfs”的文件夹,则答案是,该文件夹已加密。这将妨碍您访问包含验证所需的公共ssh密钥的“authorized_keys”文件。
要解决此问题,请将“authorized_key”文件放在不包含加密的目录树中。
我找到的简单解决方案是将authorized_keys
文件从隐藏的.ssh目录移开并将其放在系统ssh目录中:
/etc/ssh/keys/authorized_keys
我一做到这一点就没有问题。
在Windows Server 2008 r2中遇到同样的问题,并探索了很多要解决的问题,最后通过以下方式做到了:
使用textpad或任何其他文本编辑器打开C:\ Program Files(x86)\ OpenSSH \ etc \ sshd_config
删除以下行中的注释,删除后应如下所示:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
保存并尝试使用私钥登录。玩得开心。
感谢nrathaus和/var/log/auth.log
对调试级别的调查如下。
另一个原因是您的主目录可能具有不同于755的权限。
我今天遇到了这个问题,我的问题是,当从文件复制公钥时,也包括换行符。您可以在vim中使用“:set list”查看所有隐藏的新行,并确保删除除最后一行之外的所有新行。此外,我的钥匙在开始时缺少“ssh-rsa”。确保你也有。