Ubuntu 16.04下配置SSH免密码登录实践亲测

网上介绍的很多教程我试了很不好设置,很多不行了,现在自己亲自测试了在Ubuntu 16.04下配置SSH免密码登录实践过程,希望对你有用。

注意:红色字体是方法,一共两个步骤,蓝色字体为第二部的备用方法

公钥和私钥

公共密钥身份验证比密码更安全的身份验证。 这是特别重要的,如果电脑在互联网上是可见的。
如果你不认为这很重要,试一试 日志记录 下周的登录尝试得到。
我的电脑——一个极为普通的桌面PC——有4000多尝试想我的密码和近2500磨合尝试仅在上周。

公共密钥身份验证,验证实体有一个公钥和一个私钥。 每个键是一个大量具有特殊的数学性质。
私钥保存在电脑上登录,而公钥存储在 . ssh / authorized_keys 文件在所有你想要的电脑登录。
当你登录到一台电脑,SSH服务器使用公钥来“锁定”消息,只能由您的私钥“解锁”——这意味着,即使是最足智多谋的攻击者不能窥探,或干扰您的会话。 作为一个额外的安全措施,大多数SSH程序将私钥存储在passphrase-protected格式,所以如果你的电脑被盗或破碎,你应该有足够的时间来禁用之前打破你的旧公钥密码和开始使用你的关键。 维基百科有 更详细的解释 键是如何工作的。

公共密钥身份验证比密码对大多数人来说是一个更好的解决方案。 事实上,如果你不介意离开私钥保护硬盘上,你甚至可以使用钥匙安全自动登录——作为一个网络备份的一部分,例如。
SSH程序生成公钥以不同的方式不同,但是他们都生成公钥类似的格式:

<ssh-rsa or ssh-dss> <really long string of nonsense> <username>@<host>

基于SSH登录

基于密钥的验证是最安全的几个身份验证模式使用OpenSSH,如普通密码和Kerberos票据。
基于密钥的验证密码身份验证有几个优点,例如键值更难以蛮力,比普通密码或者猜测,提供充足的密钥长度。 其他身份验证方法仅在非常特殊的情况下使用。

SSH可以使用RSA(Rivest-Shamir-Adleman)或“DSA(数字签名算法)的钥匙。
这两个被认为是最先进的算法,当SSH发明,但DSA已经被视为近年来更不安全。 RSA是唯一推荐选择新钥匙,所以本指南使用RSA密钥”和“SSH密钥”可以互换使用。

基于密钥的验证使用两个密钥,一个“公共”键,任何人都可以看到,和另一个“私人”键,只有老板是允许的。
安全通信使用的基于密钥的认证,需要创建一个密钥对,安全地存储私钥在电脑人想从登录,并存储公钥在电脑上一个想登录。

使用基于密钥登录使用ssh通常被认为是比使用普通安全密码登录。 导的这个部分将解释的过程中生成的一组公共/私有RSA密钥,并将它们用于登录到你的Ubuntu电脑通过OpenSSH(s)。

生成RSA密钥

第一步是创建一个RSA密钥用于身份验证。

这应该是在客户端完成的。

公共和私人SSH密钥创建您的命令行:

mkdir ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t rsa

系统将提示您为一个位置保存密钥,密钥和密码。
这个密码保护您的私钥存储在硬盘上的:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/b/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/b/.ssh/id_rsa.
Your public key has been saved in /home/b/.ssh/id_rsa.pub.

现在可以作为您的公钥 .
ssh / id_rsa . pub 在你的主文件夹。

恭喜你! 你现在有一串钥匙。 现在是时候让你的系统允许您登录

选择一个好的密码

你需要改变你所有的锁如果你的RSA密钥是偷来的。 否则小偷冒充你无论你验证的关键。

一个SSH密钥密码是一个次要的安全形式,给你一点时间当你的钥匙偷了。 如果你的RSA密钥 强大的密码 几个小时,它可能把你的攻击者猜测通过蛮力。
额外的时间应该能够登录到任何电脑上你有一个帐户,删除旧的关键 . ssh / authorized_keys 文件,并添加一个新密钥。

你的SSH密钥密码 只有 用来保护你的私钥小偷。
从来没有在互联网上传播,你的关键的力量与强度无关你的密码。

决定用密码保护您的关键包括x安全方便。 请注意,如果你保护你的钥匙密码,当你输入密码解锁,您的本地计算机的关键解锁通常会离开一段时间。
如果你多次使用的关键不注销你的本地帐户同时,你可能只需要输入一次密码。

如果你采用一个密码,选择一个 强大的 并将它安全地存储在一个密码管理器。
你也可以把它写在一张纸上并保持在一个安全的地方。 如果你选择不与密码保护的关键,然后按下 返回 当ssh
- keygen问道。

密钥加密级别

注意:默认是一个2048位的密钥。 你可以增加这4096位- b旗(增加了比特很难破解密钥通过蛮力方法)。

ssh-keygen -t rsa -b 4096

密码身份验证

公共密钥身份验证的主要问题是,你需要一个安全的方式得到公钥到电脑之前,您可以登录。
如果你只会使用一个SSH密钥登录自己的电脑从其他一些电脑(比如登录你的电脑从你的笔记本电脑),你应该复制你的SSH密钥在记忆棒,和 禁用密码身份验证 完全。
如果你想从其他电脑登录时间(如一个朋友的电脑),确保你有一个 强密码 。

传输客户端主机的关键

您需要转移到主机的关键是公众。 如果你能通过SSH登录到电脑使用一个密码,你可以转移你的RSA密钥从自己的电脑执行以下操作:

ssh-copy-id <username>@<host>

在哪里 <用户名> 和 <主机> 应该取代了你的用户名和计算机名你转移你的关键。

由于 这只虫子 ,你不能指定一个端口,而不是标准的端口22。
你可以在这通过发出命令: ssh-copy-id”<用户名> @ <主机> - p < port_nr >”。
如果您正在使用标准端口22,你可以忽略这一建议。

另一个替代方法是将公钥复制文件到服务器并手动连接到authorized_keys文件。
这是明智的,第一:
cp authorized_keys authorized_keys_Backup
cat id_rsa.pub >> authorized_keys

你可以确定这个工作做:

ssh <username>@<host>

应该提示您输入您的密钥的密码:

用户输入密码键“/ home / < > / . ssh / id_rsa”:

输入你的密码,并提供 主机 被配置为允许基于登录,然后,你应该像往常一样登录。

故障排除

加密的主目录

如果你有一个加密的主目录,SSH无法访问你 authorized_keys 加密文件,因为它是在你的家目录和你身份验证后才可用。
因此,SSH将默认密码身份验证。

为了解决这个问题,创建一个文件夹你家外面命名 /etc/ssh/
<用户名> (“<用户名>”替换为实际的用户名)。 这个目录应该755权限,属于用户。
移动authorized_keys 文件。
的 authorized_keys 文件应该有644权限,属于用户。

然后编辑你的 /etc/ssh/sshd_config 并添加:
AuthorizedKeysFile    /etc/ssh/%u/authorized_keys

最后,重新启动ssh:
sudo service ssh restart

下次你与SSH你应该不需要输入您的密码。

username@host的密码:

如果你不提示输入密码,而得到的

username@host的密码:

用密码登录提示像往常一样,然后继续读下去。 有几件事可以阻止这个工作容易如上所述。
然而,在默认的Ubuntu安装上面的示例应该工作。 如果不是,那么检查以下条件,因为它是最常见的原因:

在主机电脑,确保 /etc/ssh/sshd_config 包含以下行, 注释 ;

PubkeyAuthentication yes
RSAAuthentication yes

如果不是,将它们添加或取消他们,重启OpenSSH,并再次尝试登录。
如果你得到了 密码 现在提示,那么恭喜你,你登录一个关键!

没有权限(publickey)

如果你确定你正确配置 中 复制你的身份证,你的私钥 .
ssh 目录,并且仍然得到这个错误:

没有权限(publickey)。

很有可能,你 /home/<用户> 或 ~
/ . ssh / authorized_keys OpenSSH权限太开放的标准。
你可以摆脱这个问题通过发出以下命令:

chmod go-w ~/
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

错误:使用密钥签署代理承认失败。

这个错误发生在客户端的ssh-agent还没有管理的关键。 发出以下命令来解决:

ssh-add

这个命令应该进入后您的公钥拷贝到主机电脑。

调试和解决更多的问题

文件和文件夹的权限对这个工作是至关重要的。 你可以从客户端和服务器端调试信息。

如果你认为你已经正确地设置它,但仍要求密码,试着启动服务器调试输出到终端。

sudo /usr/sbin/sshd -d

连接和发送信息到客户端终端

ssh -v ( or -vv) username@host's

从这里去哪里?

无论您的公钥是如何生成的,你可以把它添加到你的Ubuntu系统通过打开该文件 .
ssh / authorized_keys 在你最��欢的文本编辑器,并添加文件的底部的关键。
你也可以限制SSH特性,可以使用的关键,如禁止端口转发或只允许特定的命令来运行。 这是通过添加“选项”在SSH密钥前,在同一行中authorized_keys 文件。
例如,如果你保持一个CVS存储库,您可以添加一行是这样的:

command="/usr/bin/cvs server",no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-user-rc ssh-dss <string of nonsense>...

当用户使用指定键登录时,服务器会自动运行 /usr/bin/cvs服务器 ,忽略任何请求从客户端运行另一个命令如一个shell。

相关推荐